2016-12-22 7 views
0

Я новичок в рамках PHP Слим и я написал код для подключения к базе данных, но он показывает следующее сообщение об ошибке в консоли (существует база данных, по-прежнему получаю ошибки):Почему я не могу подключиться к базе данных, используя фреймворк PHP Slim?

enter image description here

Вот мой код :

<?php 
use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 

require '../vendor/autoload.php'; 

function dbConnect(){ 
    $host='127.0.0.1'; 
    $user='root'; 
    $pass=''; 
    $dbname='testdbmysql'; 
    $pdo= new PDO("mysql:host=$host; dbname= $dbname", $user, $pass); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
    return $pdo; 
} 

$app = new \Slim\App; 
$app->post('/hello/{id}', function (Request $request, Response $response, $args) { 
    echo "hello"; 
    $names = $request->getParsedBody(); 
    $db=dbConnect(); 
    $names_arr=[]; 
    $names_arr['name1']= filter_var($names['name1'], FILTER_SANITIZE_STRING); 
    $names_arr['name2']= filter_var($names['name2'], FILTER_SANITIZE_STRING); 
    $response->getBody()->write("Hello , ".$names_arr['name1']); 
    $query=mysqli_prepare($db, "INSERT into info(fname, lname) VALUES(?, ?)"); 
    mysqli_stmt_bind_param($query, "ss", $names_arr['name1'], $names_arr['name2']); 
    $result=mysqli_stmt_execute($query); 
    $rows=mysqli_stmt_insert_id($query); 
    echo "Rows: ".$rows; 
    return $response; 
}); 
$app->run(); 
?> 

Когда я искал в Интернете, я нашел решение одной ошибки, вызванной рамках Laravel, но не о Slim. Есть ли что-то, что я могу сделать?

+0

Что неясно в сообщении 'Неизвестная база данных'? –

+0

Я изменил базы данных и все ту же ошибку. База данных существует. –

+0

Попробуйте удалить пробел после имени dbname. 'dbname = $ dbname' – Iskar

ответ

1

Вы должны удалить пробельные

$pdo= new PDO("mysql:host=$host; dbname=$dbname", $user, $pass); 

Выход ошибки отображения пробельные тоже. Так что это должна быть ошибка.

Также не следует смешивать PDO и mysqli. Вы передаете PDO-подключение к функциям mqsqli, вот почему вы получаете «Ожидаемый mysqli, получил PDO».

Я бы придерживался mysqli и установил соединение через mysqli_connect().

+0

Ну, теперь мой запрос на вставку не работает. PhpStorm показывает эту ошибку в подготовленном заявлении: Ожидаемый mysqli, получил PDO. Есть идеи? –

+0

он хочет, чтобы вы использовали функции mysqli PHP для подключения к db – Pingbeat

+0

Не могу ли я использовать mysqli_prepare() '? –