Вопрос

Я обновляю некоторый код из старых функций mysql_* в PDO.Он подключается без проблем, выполняет запрос без проблем, но результирующий набор пуст.PDO::query() должен возвращать объект PDOStatement, но взамен я получаю true.Сообщений о каких-либо ошибках не поступало.

Вот мой код:


try
{
    $DB = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass");
    $stmt = $DB->prepare("SELECT * FROM report_clientinfo");
    $stmt->execute();
}catch(PDOException $e)
{
    echo $e->getMessage() . "\n";
}


echo gettype($stmt) . "\n";
if ($stmt) echo "true\n";
else echo "false\n";

$resultset = $stmt->fetchAll();

if(empty($resultset))
{
    exit("ERROR: getClientInfo query failed.");
}

$DB = null;

print_r($resultset);

Результат, который я вижу, таков:

объект верно ОШИБКА:Сбой запроса getClientInfo.

Есть какие-нибудь идеи, почему он не возвращает никаких результатов?

Это было полезно?

Решение

object  
true  
ERROR: getClientInfo query failed.

Мне кажется, это похоже на твой PDOStatement $stmt на самом деле сообщается, что переменная является объектом, а не "true".Затем код печатается "true" когда он увидит , что $stmt не равен нулю, каковым он и является, потому что это объект.

Я рекомендую вам проверить возвращаемое значение из $stmt->execute().Возможно, у вас ошибка SQL.Например, если вы неправильно написали имя таблицы или таблица не существует в базе данных "dbname" тот, к кому вы подключились, или пользователь, от имени которого вы входите в систему, не имеет права запрашивать эту таблицу.

Также проверьте $stmt->errorInfo() чтобы получить более подробную информацию о любой возникшей ошибке.

Другие советы

Мне немного неловко сообщать, что я указывал не на тот DSN.Наверное, это то, что я получаю за попытку узнать что-то новое всего за несколько часов сна после выхода куда-нибудь в канун Нового года.Спасибо за совет по методу PDOStatement:: errorInfo(), я раньше этого не замечал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top