我有以下代码:
$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
每次{{1}时循环运行,我得到一个空数组。
我做错了什么?
TIA。
答案 0 :(得分: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);
答案 1 :(得分:1)
增加错误报告 - 标准建议
将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;