1

我一直在尝试切换到使用 PHP 进行数据库工作的 PDO 方式。在我的 Java 生活中,我能够将命名查询放入关联数组并使用索引调用准备好的语句。它比这要复杂一些,但是...

无论如何,我认为在 PHP 中做同样类型的事情会很酷。

$NamedQueries['SelectBlackBoxById'] = "select name, category, rating from blackbox where id = :blackbox_id";

所以我可以这样准备我的陈述:

$sth = $dbh->prepare($NamedQueries['SelectBlackBoxById']);
$sth->execute(array('blackbox_id' => '1'));
$sth->setFetchMode(PDO::FETCH_OBJ); 
return $sth->fetch();

而不是这种方式:

$sth = $dbh->prepare("select name, category, rating from blackbox where id = :blackbox_id");
$sth->execute(array('blackbox_id' => '1'));
$sth->setFetchMode(PDO::FETCH_OBJ); 
return $sth->fetch();

我确定我忽略了某些东西,因为我首选的方式返回 false。任何想法将不胜感激。

4

3 回答 3

0

所以,你真正的问题是缺乏错误处理。它持续存在。

error_reporting(E_ALL);

通知超出范围的变量。

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

连接后收到空查询和其他任何 PDO 错误的通知

于 2013-02-15T17:54:29.900 回答
0
$sth->execute(array('blackbox_id' => '1'));

应该

$sth->execute(array(':blackbox_id' => '1'));

你必须包括:

于 2013-02-15T17:15:37.003 回答
0

在使用它来准备查询之前,您是否尝试过转储您的 Array 值?总的来说,我认为 PDO 使用它的方式没有任何问题,您也可以在准备好 $sth 变量后使用 var_dump() 来查看其中可能包含的内容。

一般来说,正如其他人指出的那样,“:”是绑定变量时应该包含的内容,尽管在这种情况下,我不一定认为这是根本问题,正如您所说的第二个示例有效,它使用相同的语法,唯一的区别是使用数组中的查询而不是原始字符串。认为因为它只有 1 个要绑定的变量,所以没有 ':' 不会导致问题(尽管你应该添加它)

于 2013-02-15T17:18:25.180 回答