好吧所以这会让我的垃圾漏掉,我似乎无法在PHP文档中找到任何内容,也无法在Google结果中找到任何内容,所以也许有人可以在这里提供帮助。
我试图向数据库发出简单请求以返回varchar(30)
。
代码:
$qryID = "select idPhotos from housesphotos where idHouse = ?";
//Prepare the query
$stmt = mysqli_prepare($link, $qryID);
$x = 106;
//Bind the login parameter to the statement
if(mysqli_stmt_bind_param($stmt, "i", $x)){
if(mysqli_stmt_execute($stmt)){
//Bind every column in the select
if(mysqli_stmt_bind_result($stmt, $photoID)){
// $photoID = mysqli_stmt_fetch($stmt);
echo $photoID;
}
}
}
if(empty($photoID)){
printf("EMPTY");
}
您可以猜测输出为EMPTY
。我尝试过使用此解决方案:Strange issue with mysqli_stmt_bind_result但它没有用。
为了确保everthing是正确的,我已经在mysql中进行了查询,并且它创造了奇迹:
select idPhotos from housesphotos where idHouse = 106
输出:
591219e92b2fe_591219e92b302
housephotos
是varchar(30)
字段。我不确定它是否是正在弄乱返回值的字段类型。我不确定它是否是我之前在代码上建立的连接,但我已尝试unset($stmt)
和其他变量来解决问题,但它无法正常工作。
这是mysqli_stmt_bind_result()
的某种错误还是只是一个新人的错误?
答案 0 :(得分:2)
您实际上并未提取结果 - 您已将mysqli_stmt_fetch()
注释掉了。 fetch还返回一个布尔值,而不是实际结果。取消注释该行,并删除对其的变量赋值。
$qryID = "select idPhotos from housesphotos where idHouse = ?";
//Prepare the query
$stmt = mysqli_prepare($link, $qryID);
$x = 106;
//Bind the login parameter to the statement
if(mysqli_stmt_bind_param($stmt, "i", $x)){
if(mysqli_stmt_execute($stmt)){
//Bind every column in the select
if(mysqli_stmt_bind_result($stmt, $photoID)){
mysqli_stmt_fetch($stmt); // Remove the comment and variable assignment
echo $photoID;
}
}
}
如果你仍然没有得到任何结果,可能是因为返回的行数为零(你可以在执行后用$stmt->num_rows
检查),但是因为你说查询在phpMyAdmin中工作了,你可能会忽略某些错误。要检查错误,请在else
条件中添加if
,然后在其中记录$stmt->error
。
答案 1 :(得分:1)
似乎PHP 5.4(至少是在Comcast服务器上安装的方式)存在一个错误,该错误导致在varchar字段上绑定结果失败。将字段定义更改为“文本”即可解决问题。