PHP PDO код для вставки в MySQL DB не удается - PullRequest
8 голосов
/ 10 июня 2011

У меня проблемы с устранением неполадок в простом 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

Запись не вставлена ​​в БД. Что я делаю не так? Я не уверен, что я должен увидеть в print_r, я предоставляю их в качестве помощи для ответчиков.

Спасибо,

JDelage

отредактировано - я добавил print_r, рекомендованный в комментариях.

Вот что я вижу в WAMP:

http://jdelage.public.s3.amazonaws.com/project_sch.jpg

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Похоже, что сообщение об ошибке указывает на то, что вы правильно подключились к БД, но база данных проекта не была выбрана.

Чтобы убедиться, что она пытается исправить с правильным DSN, я 'попробуйте изменить строку подключения, чтобы она содержала значения напрямую, а не переменные, например:

'mysql:host=localhost;dbname=project'

Это не должно иметь значения, но стоит проверить.

Если это не такработать, и, как вы, кажется, можете подключиться к MySQL, можно обойти это, включив имя базы данных в качестве части запроса.Таким образом, ваш запрос выше станет:

$query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)");
1 голос
/ 10 июня 2011

Очень странная проблема, кажется, вам нужно ввести dbname строчными буквами, чтобы он правильно подключался к базе данных.

Так и должно быть:

mysql:host=$dbHost;dbname=$dbName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...