У меня возникают трудности с поиском некоторых простых PHP-кода для вставки записи в таблицу MySQL.
Этот код, введенный непосредственно в WAMP, отлично работает:
INSERT INTO `users` (`userName`,`userEmail`) VALUES ('orange','orange@gmail.com')
Этот код PHP не работает:
<?php $dbHost="localhost"; $dbName="project"; $dbUser="admin"; $dbPassword="abcd"; $dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword); print_r($dbh); echo "</br>"; print_r($dbh->errorInfo()); $query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)"); echo "</br>"; print_r(var_dump($query->errorInfo())); echo "</br>"; print_r($query->errorCode()); echo "</br>"; print_r($dbh->errorInfo()); $query->bindValue(1, 'apple'); echo "</br>"; print_r(var_dump($query->errorInfo())); echo "</br>"; print_r($query->errorCode()); echo "</br>"; print_r($dbh->errorInfo()); $query->bindValue(2, 'apple@gmail.com'); echo "</br>"; print_r(var_dump($query->errorInfo())); echo "</br>"; print_r($query->errorCode()); echo "</br>"; print_r($dbh->errorInfo()); $inserted=$query->execute(); //True if succesful, False if not. echo "</br>"; print_r(var_dump($query->errorInfo())); echo "</br>"; print_r($query->errorCode()); echo "</br>"; print_r($dbh->errorInfo()); echo "</br>"; if ($inserted){print_r("true");}else{print_r("false");}; ?>
То, что я получаю при выполнении страницы, – это следующая распечатка:
PDO Object ( ) Array ( [0] => [1] => [2] => ) array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } Array ( [0] => 00000 [1] => [2] => ) array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } Array ( [0] => 00000 [1] => [2] => ) array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } Array ( [0] => 00000 [1] => [2] => ) array(3) { [0]=> string(5) "3D000" [1]=> int(1046) [2]=> string(20) "No database selected" } 3D000 Array ( [0] => 00000 [1] => [2] => ) false
Запись не вставлена в db. Что я делаю неправильно? Я не уверен, что я должен видеть в print_r, я предоставляю им помощь для респондентов.
Спасибо,
JDelage
отредактировано – я добавил, что print_r рекомендуется в комментариях.
Вот что я вижу в WAMP:
http://img.ruphp.com/php/project_sch.jpg
Сообщение об ошибке, похоже, указывает на то, что вы правильно подключились к БД, но база данных проекта не выбрана.
Чтобы убедиться, что он пытается исправить правильный DSN, я бы попытался изменить строку соединения, чтобы содержать значения напрямую, а не переменные, то есть:
'mysql:host=localhost;dbname=project'
Это не должно меняться, но стоит проверить.
Если это не сработает, и поскольку вы, кажется, можете подключиться к MySQL, обходным решением может быть включение имени базы данных в качестве части запроса. Таким образом, ваш запрос выше:
$query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)");
Очень странная проблема, кажется, что вам нужно ввести dbname
в строчные буквы, чтобы он правильно подключился к базе данных.
Так должно быть:
mysql:host=$dbHost;dbname=$dbName