Я пытаюсь сделать следующий код, но я не могу достичь строки 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]);
Но все же у вас есть проблемы с возвратом данных из подготовленного заявления 🙂