Как запустить инструкцию bind_param () в PHP?

Я пытаюсь сделать следующий код, но я не могу достичь строки execute() .

 $mysqli = $this->ConnectLowPrivileges(); echo 'Connected<br>'; $stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?"); echo 'Prepared and binding parameters<br>'; $stmt->bind_param('i', 2 ); echo 'Ready to execute<br>' if ($stmt->execute()){ echo 'Executing..'; } } else { echo 'Error executing!'; } mysqli_close($mysqli); 

Результат, который я получаю:

 Connected Prepared and binding parameters 

Таким образом, проблема должна быть в строке 5, но проверка руководства по bind_param() Я не могу найти там синтаксической ошибки.

При связывании параметров вам необходимо передать переменную, которая используется в качестве ссылки:

 $var = 1; $stmt->bind_param('i', $var); 

См. Руководство: http://php.net/manual/en/mysqli-stmt.bind-param.php

Обратите внимание, что $var фактически не нужно определять для привязки. Вполне справедливо следующее:

 $stmt->bind_param('i', $var); foreach ($array as $element) { $var = $element['foo']; $stmt->execute(); } 

здесь это просто объяснение
объявить переменную, подлежащую связыванию

  $var="email"; $mysqli = $this->ConnectLowPrivileges(); echo 'Connected<br>'; $var="email"; $stmt = $mysqli->prepare("SELECT name, lastname FROM tablename WHERE idStudent=?" LIMIT=1); echo 'Prepared and binding parameters<br>'; $stmt->bindparam(1,$var); 

Ваша фактическая проблема не в строке 5, а в строке 1.
Вы пытаетесь использовать непригодный драйвер.
Пока PDO делает именно то, что вы хотите.

 $sql = "SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?" $stm = $this->pdo->prepare($sql); $stm->execute(array(2)); return $stm->fetch(); - $sql = "SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?" $stm = $this->pdo->prepare($sql); $stm->execute(array(2)); return $stm->fetch(); 

Спустя все годы, прошедшие с момента написания этого ответа, появилась новая функция PHP, называемая «распаковка аргументов». Итак, начиная с версии 5.6 вы можете передать значение в bind_param:

 $stmt->bind_param('i', ...[2]); 

Но все же у вас есть проблемы с возвратом данных из подготовленного заявления 🙂