【问题标题】:PDO not returning results from mysql queryPDO 不从 mysql 查询返回结果
【发布时间】: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= 后面的空格,无法解析数据库名称。删除所有这些空格,这应该是有序的。

标签: php mysql pdo


【解决方案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();
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2013-08-24
      • 1970-01-01
      相关资源
      最近更新 更多