PDO 不从 mysql 查询返回结果

Posted

技术标签:

【中文标题】PDO 不从 mysql 查询返回结果【英文标题】:PDO not returning results from mysql query 【发布时间】:2015-01-29 18:42:31 【问题描述】:

我很喜欢使用 mysqli 风格的 php 查询,但我正在尝试使用更多的 PDO。我想我知道如何使用它的大部分内容,但时不时会出现一些让我感到震惊的事情。

所以我正在对 mysql 数据库进行基本的 SELECT 查询,但我无法从查询中得到任何结果

PHP

try 
    $dbhandle = new PDO("mysql:dbname = $dbname; host = $dbhost; port = $dbport", $dbuser, $dbpass);
 catch (PDOException $e)

    echo "Error when creating Database Handle. Error: " .$e;


$sql = $dbhandle->prepare("SELECT projectName FROM `__projects`");
$sql->execute();

$projectList = $sql->fetch(PDO::FETCH_BOTH);

$size = sizeof($projectList);
echo $size;

我不明白为什么返回的数组是空的。我是不是搞错了。我知道用户/密码没问题,因为我可以在使用 mysqli 方法时使用相同的查询返回结果。

我做错了什么?

【问题讨论】:

为什么在表名两边加引号?你试过在phpAdmin或者其他数据库管理工具上查询吗? @MarcoMura 这些至少是表名的正确引号。 @MarcoMura 将它们放在那里并没有错,它们对于非关键字名称是可选的。有些人喜欢根据喜好引用所有列。 DSN 字符串中不应包含空格。一个连续字符串:mysql:dbname=database;host=hostname;port=3306 发生的事情是,由于 DSN 字符串中的空格,PDO 未能从 DSN 解析任何有用的内容并使用系统默认主机和端口,可能成功建立到 localhost 的连接,但是由于dbname= 后面的空格,无法解析数据库名称。删除所有这些空格,这应该是有序的。 【参考方案1】:

尝试调整您的连接语句。我不确定订单是否会影响它,但从文档来看,它应该类似于:

mysql:host=localhost;port=3307;dbname=testdb

http://php.net/manual/en/ref.pdo-mysql.connection.php

谢谢,

安德鲁

【讨论】:

【参考方案2】:

当你想执行一个查询时,首先通过设置它不等于或等于 false 来确保它会运行。这样你就可以调试你的脚本。尝试单独准备查询,而不是立即执行。

以下示例选择 'id' 为 1 或 3 的行。

<?php
// Connection data (server_address, database, name, poassword)
$hostdb = 'localhost';
$namedb = 'tests';
$userdb = 'username';
$passdb = 'password';

try 
// Connect and create the PDO object
  $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  $conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8

  // Define and perform the SQL SELECT query
  $sql = "SELECT * FROM `sites` WHERE `id` IN(1, 3)";
  $result = $conn->query($sql);

  // If the SQL query is succesfully performed ($result not false)
  if($result !== false) 
   $cols = $result->columnCount();           // Number of returned columns

 echo 'Number of returned columns: '. $cols. '<br />';

// Parse the result set
foreach($result as $row) 
  echo $row['id']. ' - '. $row['name']. ' - '. $row['category']. ' - '. $row['link']. '<br />';



$conn = null;        // Disconnect

catch(PDOException $e) 
echo $e->getMessage();

?>

【讨论】:

以上是关于PDO 不从 mysql 查询返回结果的主要内容,如果未能解决你的问题,请参考以下文章

删除mysql查询python结果的行但不从数据库中删除

PHP:PDO查询不返回结果,但在phpmyadmin中同样的查询返回4个结果?

PDO 查询未在 PHP foreach 循环中返回结果

mysql“日期之间”查询在 phpmyadmin 中有效,但 PDO 不返回任何内容

PDO 只返回 mysql 的一半结果

PDO:删除查询结果的重复项[重复]