Можно ли выполнить подготовленный MySQLi оператор до того, как другой будет закрыт? - PullRequest
0 голосов
/ 11 сентября 2011

Допустим, у меня есть готовое заявление.Запрос, который он готовит, не имеет значения.Я получаю результат, как описано выше (я не могу показать реальный код, потому что я не хочу его показывать. Пожалуйста, сконцентрируйтесь на проблеме, а не на бессмысленных примерах), и я получаю

Неустранимая ошибка: Вызов функции-члена bind_param () для необъекта в ... error.Ошибка вызвана в вызываемом объекте.

<?php
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

class table2Info{
    private $mysqli;

    public function __construct($_mysqli){
        $this->mysqli = $_mysqli;
    }

    public function getInfo($id)
    {
        $db = $this->mysqli->prepare('SELECT info FROM table2 WHERE id = ? LIMIT 1');
        $db->bind_param('i',$db_id);

        $db_id  = $id;

        $db->bind_result($info);
        $db->execute();
        $db->fetch();

        $db->close();

        return $info;
    }

}
$t2I = new table2Info($mysqli);

$stmt->prepare('SELECT id FROM table1 WHERE name = ?');
$stmt->bind_param('s',$name);

$name = $_GET['name'];

$stmt->bind_result($id);
$stmt->execute();

while($stmt->fetch())
{
    //This will cause the fatal-error
    echo $t2I->getInfo($id); 
}
$stmt->close();
?>

Вопрос в следующем: есть ли способ сделать другое подготовленное утверждение, пока другое еще открыто?Это упростило бы код для меня.Я не могу решить это с помощью SQL JOIN или чего-то в этом роде, так должно быть.Теперь я собираю извлеченные данные в массив и перебираю их после $stmt->close();, но это не очень хорошее решение.Почему я должен делать две петли, когда одна лучше?

1 Ответ

0 голосов
/ 11 сентября 2011

Судя по получаемой вами ошибке, подготовка вашего заявления не удалась. mysqli::prepare возвращает объект MySQLi_STMT или false при ошибке.

Проверьте возвращаемое значение из вашей подготовки выписки, которая вызывает ошибку. Если это ложь, вы можете увидеть более подробную информацию, посмотрев на mysqli::error.

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