第二个mysqli_query无效

时间:2014-06-13 05:25:43

标签: php mysql

我有跟随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,无论如何,如果第一个查询失败,它是否执行第二个查询,如果第一个查询失败则不执行第二个查询?

4 个答案:

答案 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)

  1. 为您的值使用引号。

    $ query =“INSERT INTO用户(电子邮件,密码,userId)VALUES('$ email','$ password','$ userId')”;

    $ addResult = mysqli_query($ link,$ query);

  2. 如果您遇到错误而不是使用die函数来获取错误详细信息。

    $ addResult = mysqli_query($ link,$ query)或die(mysqli_error($ link));

  3. 它也会显示错误。