我对 PHP 非常陌生,我正在尝试了解安全措施,例如防止注入(inject)。下面是我的代码。基本上我收到错误“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行'1'附近使用的正确语法”。数据仍在发送到数据库中,但此错误让我认为注入(inject)预防不起作用。当我使用 Dreamweaver 时,我没有遗漏任何 {
,它至少会告诉我是否遗漏了。
另外,要注意的是,数据库连接线和函数位于一个单独的 php 文件中,而不是 $_POST 代码中的内容。
$conn = mysqli_connect($host, $user, $password, $databaseName);
if ($_POST) {
if(isset($_POST['register'])){
registerUser( //I'm calling the function here
$_POST['username'],
$_POST['user_password'],
$_POST['user_fname'],
$_POST['user_lname'],
$_POST['email'],
$_POST['phone'],
$_POST['user_birthdate'],
$_POST['user_address1'],
$_POST['user_address2'],
$_POST['user_city'],
$_POST['user_postcode'],
$conn);
}
}
function registerUser(
$username,
$user_password,
$user_fname,
$user_lname,
$email,
$phone,
$user_birthdate,
$user_address1,
$user_address2,
$user_city,
$user_postcode,
$conn){
if($stmt = $conn->prepare("INSERT INTO fcusers (
username,
user_password,
user_fname,
user_lname,
email,
phone,
user_birthdate,
user_address1,
user_address2,
user_city,
user_postcode)
VALUES (?,?,?,?,?,?,?,?,?,?,?)")){
$stmt->bind_param("sssssssssss",
$username,
$user_password,
$user_fname,
$user_lname,
$email,
$phone,
$user_birthdate,
$user_address1,
$user_address2,
$user_city,
$user_postcode);
$sql = $stmt->execute();
$stmt->close();
}
$result = mysqli_query($conn,$sql) or die(mysqli_error($conn));
if($result){
echo "CONGRATS";
}
}
最佳答案
生成的错误来自您的 mysqli_query(),而不是准备好的语句。准备好的语句通过 $sql = $stmt->execute()
执行。
使用mysqli_query($conn,$sql)
,您正在运行一个返回值为$stmt->execute()
的查询,在本例中将对其进行评估as 1 (boolean true) 因此出现错误:在'1'附近使用的语法
您可以在 $stmt->execute()
上运行您的条件:
$result = $stmt->execute() or die(mysqli_error($conn));
关于php - 防止注入(inject): Using prepared statements and parameters in a function - syntax error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152744/