获取要执行的基本PDO语句

时间:2012-09-27 13:29:47

标签: php pdo

我试图让以下PDO语句工作并遇到问题。当我试图获得行数时,我一直得到0,但我知道应该有1行。当我把它作为mysqli语句运行时(在尝试将其更改为PDO之前)它完美地工作。 这是代码:

    require_once ('pdo.php');
$isbn = $_POST['isbn'];
    // check to see if the isbn is a "problem" isbn or not
$problem = $conn->prepare("select isbn, note from problem where isbn = :isbn");
$problem->bindParam(":isbn", $isbn);
$problem->execute();
print_r($problem);

$num_rows = $problem->rowCount();

print_r($num_rows); die;

编辑:这是pdo.php:

    <?php

function db_connect()
{ 
$db = new PDO("mysql:host=localhost; db=bookcell_BCOS_final", "xxxxx", "xxxxx");
return($db);
}
?>

我知道我的连接有效,但$ num_rows得到0。我在这里犯了什么错误?

5 个答案:

答案 0 :(得分:1)

除了一点点怪癖和优化之外,你的代码看起来还不错。发布的值isbn可能是您没有获得数据的原因:

$problem = $conn->prepare("select isbn, note from problem where isbn = :isbn"); 
$problem->bindParam(":isbn", $_POST['isbn'], PDO::PARAM_STR); // <-- thats what parameter binding is for 
$problem->execute(); 
print_r($problem); 

$num_rows = $problem->rowCount(); // <-- gives the number of rows, not columnCOunt 

print_r($num_rows); die; 

答案 1 :(得分:0)

$num_rows = $problem->columnCount();的语法完全正确。你可以试试,

$problem->execute(array("isbn" => $isbn));

而不是bindParam

答案 2 :(得分:0)

获得号码。行,您需要使用pdo::rowCount() - manual here

答案 3 :(得分:0)

在PDO中,如果execute statement确实有效,请检查返回值(布尔):

$success = $problem->execute();

if (!$success) {
    $arr = $problem->errorInfo();
    print_r($arr);
}

此外,您可能正在寻找rowCount()而不是columnCount(),但我认为错误处理是您最关心的问题。

此外,每次出现错误时,您都可以让PDO抛出异常,比较:

答案 4 :(得分:0)

根据数据库驱动程序及其运行的模式,PDO可能无法为您提供行计数。仔细查看the documentation for PDOStatement::rowCount()

  

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。 但是,并不保证所有数据库都会出现这种情况,不应依赖于便携式应用程序。

这是因为在许多情况下,数据库使用游标而不是获取完整结果并缓冲它们(这是旧mysql_*函数的行为方式)。在这种情况下,在查看所有行之前,数据库不知道有多少行。将光标视为文件系统指针 - 在搜索到文件末尾之前,您无法知道文件大小。