如何在PHP中使用mysqli准备语句?

我正在尝试准备好的语句,但下面的代码不起作用。 我收到错误:

致命错误:调用第12行的/var/www/prepared.php中的非对象的成员函数execute()

<?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来准备报表? 任何人都可以指向一个完整的例子,从连接到插入到error handling的select准备好的语句?

fdsa从mysqli::prepare文档 :

在执行语句或读取行之前,必须使用mysqli_stmt_bind_param()和/或mysqli_stmt_bind_result()将参数标记绑定到应用程序variables。

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来准备语句。 任何一个人可以指向一个完整的例子,从连接到插入到error handling的select准备好的语句

你也可以使用我更喜欢的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不同,您不必调用单独的绑定函数,但是如果您愿意/需要/需要使用该function,则可以使用该function。

关于PDO的另一个有趣的事情是命名占位符,在复杂的查询中可能会less得多。

 $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"); }