【问题标题】:How can I convert this working mysql statement to PDO effectively?如何有效地将这个工作 mysql 语句转换为 PDO?
【发布时间】:2014-10-20 22:26:43
【问题描述】:

我正在尝试转换为使用 PDO,但似乎无法从我的 PDO while 循环中获得结果。

这个mysql语句给了我结果:

$q = mysql_query("SELECT * FROM artist ORDER BY artist ASC");
while ($row = mysql_fetch_array($q)) {
  $theartist .= '<option value="'.($row['artist_id']).'">'.($row['artist'])."</option>";
}    

PDO 数据库连接(似乎可以工作)

//the below isn't throwing any errors
$host='localhost';
$dbname='james_test';
$user='test';
$pass='testpass';

try {
  # MySQL with PDO_MYSQL
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
}
catch(PDOException $e) {
    echo $e->getMessage();
}

这个 PDO 语句没有给我任何结果:

$query = $DBH->prepare("SELECT * FROM artist ORDER BY artist ASC");
while($row = $query->fetch(PDO::FETCH_ASSOC)) {
    $theartist .= '<option value="'.($row['artist_id']).'">'.($row['artist'])."</option>";
}

【问题讨论】:

  • 连接打开后立即添加$DBH-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);。您还需要execute()。在进入驾驶座之前,请务必阅读手册php.net/manual/en/pdo.prepare.php

标签: php mysql pdo


【解决方案1】:

您错过了运行查询的步骤。使用 PDO,您可以准备优化性能并有助于防止 SQL 注入的查询,但您仍必须“执行”该语句。

$query = $DBH->prepare("SELECT * FROM artist ORDER BY artist ASC");
$result = $query->execute();
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    $theartist .= '<option value="'.($row['artist_id']).'">'.($row['artist'])."</option>";
}

相关PHP手册条目:

http://php.net/manual/en/pdostatement.execute.php

http://php.net/manual/en/pdo.prepare.php

【讨论】:

  • 我复制并粘贴了它,但如果我以这种方式更改代码,我的页面无法正确加载。
【解决方案2】:

这只是通过稍微更改您的代码使其工作。

//$query = $DBH->prepare("SELECT * FROM artist ORDER BY artist ASC"); $rows = $DBH->query("SELECT * FROM artist ORDER BY artist ASC"); //while($row = $query->fetch(PDO::FETCH_ASSOC)) { if ($rows) { foreach ($rows as $row) { $theartist .= ''.($row['artist']).""; } }

编辑: 查询函数可以一次性完成准备和执行,如果您没有要在查询中使用的变量,它会很有用。

【讨论】:

  • 警告:为 foreach() 提供的参数无效
  • 我猜 $rows 是空的。我认为你需要检查 $rows 是否有东西。我将更改我的代码。
  • if($rows) 没有抛出错误,但仍然没有结果。
  • 在 if 语句之前对 $rows 做一个 var_dump 并查看 $rows 是否有任何内容。 var_dump($rows).
  • object(PDOStatement)#5 (1) { ["queryString"]=> string(40) "SELECT * FROM Artist ORDER BY Artist ASC" }
猜你喜欢
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2015-01-05
  • 2011-01-24
  • 1970-01-01
相关资源
最近更新 更多