我有以下用于注册用户的 php 脚本
<?php
require_once "setting.php";
extract($_REQUEST);
$link = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName);
if (mysqli_connect_errno()){
echo "Connection failed".mysqli_connect_error();
}
$initQuery = "SELECT * FROM users WHERE email = ".$email;
$initResult = mysqli_query($link, $initQuery);
$dbResults = mysqli_fetch_array($initResult, MYSQLI_ASSOC);
if($dbResults == null ){
echo('in the if statement');
$userId = uniqid();
echo($userId);
$query = "INSERT INTO users(email, password, userId) VALUES ($email, $password, $userId )";
echo($query);
$addResult = mysqli_query($link, $query);
echo($addResult);
}
mysqli_free_result($initResult);
mysqli_free_result($addResult);
mysqli_close($link);
?>
第二个 mysqli_query 没有添加用户,我检查了 sql 语句的语法,它工作正常。有人有什么想法吗?
我还在考虑也许尝试编写一个 mysqli_multi_query 来运行这两个查询。我读到,如果第一个查询失败,multi_query 将返回 false,是否有办法让它在第一个查询失败时执行第二个查询,而在第一个查询成功时不执行第二个查询?
最佳答案
看在上帝的份上,如果不使用准备好的语句,至少将字符串值放在引号内
"INSERT INTO users(email, password, userId) VALUES ($email, $password, $userId)"
无效。这些字符串值应该在引号内
"INSERT INTO users(email, password, userId) VALUES ('$email', '$password', '$userId')"
在实现上述解决方案之前,请阅读以下内容:
How can I prevent SQL injection in PHP?
至少,请使用mysqli_real_escape_string
转义值
关于php - 第二个 mysqli_query 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24198267/