【问题标题】:PHP PDO prepared query won't return results from for loopPHP PDO 准备好的查询不会从 for 循环返回结果
【发布时间】:2010-11-06 12:29:25
【问题描述】:

我有以下代码:

$link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
$query = $link->prepare("SELECT * FROM index WHERE sbeid=:idvar");
for($j = 1; $j < count($array); $j++)
{
    if($array[$j][16] == "TRUE" || $array[$j][16] == "FALSE")
    {
        $paramforquery = $array[$j][25];
        $query->bindParam(":idvar",$paramforquery);
        $query->execute();
        $result = $query->fetchAll();
        //do things with the $result
        $query->closeCursor();
    }
    //else if, do stuff
}
$link = null;

$array 是一个大型数组,由来自通过fopen() 成功加载的 CSV 文件的输入组成。

我的问题是:查询不起作用。我知道一个事实(使用文件中的一些示例值直接在服务器上运行查询)数据在数据库中,但是当我 var_dump $results 每次运行 for 循环时,我只得到一个空数组。

我做错了什么?

TIA。

【问题讨论】:

    标签: php mysql pdo for-loop


    【解决方案1】:

    您确定您正在建立连接吗?

    try {
        $link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
    }
    

    这将捕获任何尝试连接的异常。如果一切正常,请尝试将查询放在 $link 行下并查看返回的内容。

    如果您的查询手动运行,我会说它与您的数据库连接有关。确保您已打开错误报告。

    补充: 在您的查询中,您有这个 :idvar ?你不应该使用像 $idvar 这样的 PHP 变量。

    所以

    $query = $link->prepare("SELECT * FROM index WHERE sbeid=" . $idvar);
    

    【讨论】:

    【解决方案2】:

    增加错误报告 - 标准建议。
    将 pdo 对象的错误模式设置为 ERRMODE_EXCEPTION - 这样您几乎不会错过任何错误。
    使用调试器或在脚本中添加一些调试输出 - 真正的调试器会更好。

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);  
    $array = foo();
    echo '<pre>Debug: |array|=', count($array), '</pre>';
    
    $link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
    $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
    $query = $link->prepare("SELECT * FROM index WHERE sbeid=:idvar");
    $query->bindParam(":idvar", $paramforquery);
    
    foreach($array as $row) {
        echo '<pre>Debug: row[16]='; var_dump($row[16]); echo '</pre>';
        if($row[16] == "TRUE" || $row[16] == "FALSE") {
            $paramforquery = $row[25];
            echo '<pre>Debug: paramforquery='; var_dump($paramforquery); echo '</pre>';
            $query->execute();
            echo '<pre>Debug: rowcount='; var_dump($query->rowCount()); echo '</pre>';
            $result = $query->fetchAll();
            //do things with the $result
            $query->closeCursor();
        }
        //else if, do stuff
    }
    $link = null;
    

    【讨论】:

    • 谢谢 - 事实上我确实需要将 PDO 对象的错误报告模式增加到异常:我的查询中有一个严重的错误。感谢您的帮助。
    猜你喜欢
    • 2012-05-16
    • 2015-07-23
    • 2012-10-16
    • 2015-05-09
    • 2015-01-29
    • 2014-09-15
    • 1970-01-01
    相关资源
    最近更新 更多