【发布时间】:2017-03-08 00:39:28
【问题描述】:
所以这只是我的代码的一部分,但却是唯一相关的事情:
if ($check == 0) {
$host = "localhost";
$user = "root";
$pass = "";
$db = "myfirstdb";
$connect = new mysqli($host,$user,$pass,$db);
if ($connect->connect_error){
die("Connection failed: " . $connect->connect_error);
} else {
echo "Connected successfully!";
}
//$sql = "INSERT INTO table1 (firstname , lastname , phone , email , date) VALUES (:fname, :lname, :phone, :email, :date)";
$secure = $db->prepare("INSERT INTO table1 (firstname , lastname , phone , email , date) VALUES (:fname, :lname, :phone, :email, :date)");
$secure->bindParam(':fname' , $firstname);
$secure->bindParam(':lname' , $lastname);
$secure->bindParam(':phone' , $phone);
$secure->bindParam(':email' , $email);
$secure->bindParam(':date' , $date);
$secure->execute();
/*if ($connect->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $connect->error;
}*/
$connect->close();
我遇到的问题是每当我执行代码时都会弹出一个错误:
致命错误:未捕获的错误:调用 C:\xampp\htdocs\example\Index.php:206 中字符串上的成员函数 prepare() 堆栈跟踪:#0 {main} 在 C:\xampp\htdocs 中抛出\example\Index.php 第 206 行
我正在尝试通过使用此代码来避免 SQL 注入,但我不确定我是否理解它。
【问题讨论】:
-
您的准备失败,您未能检查失败,并继续传播错误。特别是:mysqli 不支持命名占位符。您正在尝试将 PDO 语义与完全不同的库一起使用。永远不要永远假设对外部资源的操作会成功。始终假设失败,检查失败,并将成功视为惊喜。
-
你没有 $db 变量,你有 $connect。
-
我也没有看到你传入的变量是在哪里设置的。
-
变量已设置,但我没有粘贴整个代码,因为我认为它不相关。
-
@MarcB 根据php mysqli,这不仅仅是 PDO 语义。 mysqli可以这样使用。