我有一个在phpmyadmin中运行的查询但是在我的代码中不起作用!我已经尝试了各种变量转储,看看在查询执行之前我是否一直在丢失数据,一切似乎都没问题,我在phpmyadmin成功查询时使用的变量内容相同
测试我更换了:
$account_id = $account->getAccountId(); //output below
string(2) "59" string(4) "main" NULL NULL array(2) { ["id"]=> NULL["name"]=>NULL}
使用
$account_id = 59; //output below
int(59) string(4) "main" NULL NULL array(2) { ["id"]=> NULL ["name"]=> NULL }
下面是代码提取,我使用的是mysqli:
$account = $Add_Profile_Image->getUserAccount();
$account_id = $account->getAccountId();
$status = $account->getType();
var_dump($account_id);
var_dump($status);
$conn = $this->create_connection('read');
$stmt = $conn->prepare('SELECT add_profile_images.image_id, image_name FROM add_profile_images, users_profile_images WHERE users_profile_images.account_id=? AND users_profile_images.status=?');
$stmt->bind_param('is',$account_id,$status);
$stmt->bind_result($id,$imageName);
$stmt->execute();
var_dump($id);
var_dump($imageName);
$result['id'] = $id;
$result['name'] = $imageName;
我已经取代了
image_name //in the query
要
add_profile_images.image_name //in the query
但结果仍为NULL?
所以我在这篇文章中尝试了以下示例:PHP Prepared Statement Returns -1 当我转储mysqli对象时,它确实返回-1但是当我实现下面没有错误时 显示!
if($conn->connect_error) {
printf('connect error (%d) %s', $conn->connect_errno, htmlspecialchars($conn->connect_error));
die;
}
$stmt = $conn->prepare('SELECT add_profile_images.image_id, add_profile_images.image_name FROM add_profile_images, users_profile_images WHERE users_profile_images.account_id=? AND users_profile_images.status=?');
if ( false===$stmt ) {
printf('prepare failed: %s', htmlspecialchars($conn->error));
die;
}
$rc = $stmt->bind_param('is',$account_id,$status);
if ( false===$rc ) {
printf('bind_param failed: %s', htmlspecialchars($stmt->error));
die;
}
$rc= $stmt->execute();
if ( false===$rc ) {
printf('execute failed: %s', htmlspecialchars($stmt->error));
die;
}
$rc = $stmt->bind_result($id,$imageName);
if ( false===$rc ) {
printf('bind_result failed: %s', htmlspecialchars($stmt->error));
die;
}
我哪里错了?
希望有人可以提供帮助!
由于
答案 0 :(得分:5)
你需要声明$ stmt-> bind_result()AFTER $ stmt-> execute() (见:http://php.net/manual/en/mysqli-stmt.bind-result.php)
答案 1 :(得分:1)
我有同样的问题,原因是在使用语句prepare时关闭了连接。确保在您的流程中没有关闭连接