我有跟随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,无论如何,如果第一个查询失败,它是否执行第二个查询,如果第一个查询失败则不执行第二个查询?
答案 0 :(得分:1)
对于上帝的爱,如果不使用预备语句,至少将字符串值放在引号内
"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
答案 1 :(得分:0)
希望这有效:
$query = "INSERT INTO users (email, password, userId) VALUES ('$email', '$password', $userId)";
在表名后面给一个空格,在单引号中给出所有变量。 :)
空间不是必须给予的,但对于更好的编码会有好处:)
答案 2 :(得分:0)
尝试将值放在引号内。
$query = "INSERT INTO users(email, password, userId) VALUES ('$email', '$password', '$userId' )";
要理解为什么引用是强制性的,我举一个例子:)。 Mysql支持从另一个表中选择SELECT作为插入值,如下面的代码所示:
INSERT INTO users (email, password, userId)
VALUES
((SELECT email FROM user_info WHERE id = '$userId'),'$password','$userId'))
答案 3 :(得分:0)
为您的值使用引号。
$ query =“INSERT INTO用户(电子邮件,密码,userId)VALUES('$ email','$ password','$ userId')”;
$ addResult = mysqli_query($ link,$ query);
如果您遇到错误而不是使用die函数来获取错误详细信息。
$ addResult = mysqli_query($ link,$ query)或die(mysqli_error($ link));
它也会显示错误。