PHP MYSQLI Prepared Statement возвращает NULL - PullRequest
1 голос
/ 14 марта 2012

У меня есть запрос, который работает в 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 выражение возвращает -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 ]

5 голосов
/ 14 марта 2012

Вам необходимо указать $ stmt-> bind_result () ПОСЛЕ $ stmt-> execute () (см .: http://php.net/manual/en/mysqli-stmt.bind-result.php)

1 голос
/ 12 мая 2017

У меня была та же проблема, причиной которой является закрытие соединения при использовании оператора prepare.убедитесь, что в вашем потоке нет такого закрытия соединения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...