Как использовать подготовленные команды mysqli в PHP?

Я пытаюсь подготовить подготовленные заявления, но приведенный ниже код не работает. Я получаю сообщение об ошибке:

Неустранимая ошибка: вызов функции-члена execute () для не-объекта в /var/www/prepared.php в строке 12

<?php $mysqli = new mysqli("localhost", "root", "root", "test"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; } $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // insert one row $stmt->execute(array('one',1)); // insert another row with different values $stmt->execute(array('two',1)); ?> 

Кроме того, мне нужно использовать mysqli для подготовленных операторов? Может ли кто-нибудь указать мне на полный пример подготовленных операторов подключения к вставке для выбора с обработкой ошибок?

fdsa Из mysqli::prepare документы :

Маркер параметров должен быть привязан к переменным приложения с помощью mysqli_stmt_bind_param () и / или mysqli_stmt_bind_result () перед выполнением инструкции или выборкой строк.

Документы bind_param .

то есть:

 $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // bind parameters. I'm guessing 'string' & 'integer', but read documentation. $stmt->bind_param('si','one',1); // *now* we can execute $stmt->execute(); 

Также мне нужно использовать mysqli для подготовленного оператора. Может ли кто-нибудь указать мне на полный пример подготовленного заявления от подключения к вставке в выборку с обработкой ошибок

Вы также можете использовать PDO, который я предпочитаю. На самом деле это похоже на то, что вы запутываете PDO и Mysqli в своем примере кода.

 $db = new PDO($dsn, $user, $pass); $stmt = $db->prepare("INSERT INTO users (name, age) VALUES (?,?)"); $stmt->execute(array($name1, $age1)); $stmt->execute(array($name2, $age2)); 

В отличие от mysqli вам не нужно вызывать отдельную функцию привязки, хотя эта функция доступна, если вы предпочитаете / хотите / должны ее использовать.

Еще одна забавная вещь о PDO называется заполнителями, которые могут быть гораздо менее запутанными в сложных запросах:

 $db = new PDO($dsn, $user, $pass); $stmt = $db->prepare("INSERT INTO users (name, age) VALUES (:name,:age)"); $stmt->execute(array(':name' => $name1, ':age' => $age1)); $stmt->execute(array(':name' => $name2, ':age' => $age2)); 

Попробуйте это, очистите входящие данные. И не забывайте теги php.

 function clean($data) { $data = trim(strip_tags(htmlspecialchars($data))); return $data; } $field1 = isset($_POST['field1']) ? clean($_POST['field1']): NULL; $field2 = isset($_POST['field2']) ? clean($_POST['field2']): NULL; $field3 = isset($_POST['field3']) ? clean($_POST['field3']): NULL; $field4 = isset($_POST['field4']) ? clean($_POST['field4']): NULL; $field5 = isset($_POST['field5']) ? clean($_POST['field5']): NULL; $field6 = isset($_POST['field6']) ? clean($_POST['field6']): NULL; $field7 = isset($_POST['field7']) ? clean($_POST['field7']): NULL; $database = new mysqli("localhost", "username", "password", "database"); if ($database->errno) die("Error opening database: " . $database->error()); $query = 'INSERT INTO `tablename` (`field1`, `field2`, `field3`, `field4`, `field5`, `field6`, `field7`) VALUES (?, ?, ?, ?, ?, ?, ?)'; $result = $database->prepare($query); $result->bind_param('sssssss', $field1, $field2, $field3, $field4, $field5, $field6, $field7); $result->execute(); $database->close(); { header("Location: http://www.somewebsite.com"); }