PHP PDO 准备好的查询不会从 for 循环返回结果

发布于 2024-07-25 05:16:59 字数 861 浏览 4 评论 0原文

我有以下代码:

$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 是一个大数组,由 CSV 文件的输入组成,该文件通过 fopen() 成功加载。

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

我究竟做错了什么?

TIA。

I have the following code:

$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 is a large array composed of input from a CSV file that successfully loads via fopen().

My problem is this: the query just doesn't work. I know for a fact (ran the query directly on the server with some sample values from the file) that the data is in the database, but when i var_dump the $results each time the for loop runs, I just get an empty array.

What am I doing wrong?

TIA.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

网白 2024-08-01 05:16:59

增加错误报告 - 标准建议。
将 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;

Increase the error reporting - the standard advice.
Set the error mode of the pdo object to ERRMODE_EXCEPTION - you hardly can miss an error that way.
Use a debugger or add some debug output to your script - a real debugger is way better.

<?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;
遮了一弯 2024-08-01 05:16:59

您确定正在建立连接吗?

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);

Are you sure you are getting a connection ?

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

This will catch any exceptions from trying to connect. If this works ok, try putting the query under the $link line and see what's returned.

If your query runs manually, i'd say its something to do with your DB connection. Make sure you've got error reporting turned on.

Additional:
In your query you have this :idvar ? Shouldnt you be using a PHP variable like this $idvar.

so

$query = $link->prepare("SELECT * FROM index WHERE sbeid=" . $idvar);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文