PHP MYSQLI Prepared语句返回NULL

时间:2012-03-14 14:18:44

标签: php mysqli

我有一个在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;
        }

我哪里错了?

希望有人可以提供帮助!

由于

2 个答案:

答案 0 :(得分:5)

你需要声明$ stmt-> bind_result()AFTER $ stmt-> execute() (见:http://php.net/manual/en/mysqli-stmt.bind-result.php

答案 1 :(得分:1)

我有同样的问题,原因是在使用语句prepare时关闭了连接。确保在您的流程中没有关闭连接