MySQL查询错误 - 隐藏的错误?

时间:2014-12-04 18:32:43

标签: php mysql sql

我正在尝试制作一个注册表单,但是sql查询只是不起作用..尝试添加同意并删除它们,将(')符号添加到插入的数据并删除它们......没有任何作用!我不确定我的错误在哪里...有人可以帮忙吗?

PHP代码:

      $mysqli = new mysqli('localhost','root','','wisdom') or die("CONNECTION ERROR");

  $query = "INSERT INTO net_users VALUES (NULL,'$fname','$mname','$lname','$dob','$uname','$pasw','$phone1','$phone2','$email',NULL,NULL,NULL,'$date');";

      if($mysqli->query($query)) echo "REGISTERED";
      else echo "<br><br>FAILED: ".$mysqli->error;

ERROR:

FAILED: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123456789,987654321,b@b.b,NULL,NULL,NULL,14/12/04)' at line 1

数据($ _POST):

Array ( 
[fname] => A   //$fname
[mname] => A   //$mname
[lname] => A   //$lname
[dob] => 2014-07-17   //$dob
[username] => bakriawad  //$uname
[password] => horray     //$passw
[cpassword] => horray  
[email] => b@b.b         //$email
[phone1] => 123456789    //$phone1
[phone2] => 987654321    //$phone2
[botchk] =>   
[tos] => on ) 

// $ date = date(“y / m / d”);

我确保数据与行数据类型匹配...我尝试多次更改和重写代码......没有任何作用!它只是卡在那里!

-------------------------------------------- ------------------------------------------- \

修改 服务器被冻结(或什么东西..),重新启动后接受输入..对不起打扰..但经过6小时的工作你很难直接思考...错误永远不会改变,即使sql不断变化,这是一个清晰的标记。

3 个答案:

答案 0 :(得分:2)

两件事;一个是坏的,另一个是非常糟糕的。

  1. 您忘记在字符串值周围加上引号,因此SQL表达式不是很好的。
  2. 您首先遇到SQL注入攻击风险。 Please read this了解它是什么以及如何预防它。

答案 1 :(得分:2)

您不能将变量连接到SQL查询字符串中,并希望它能够正常工作。您需要在字符串值周围添加引号,并确保每个字符串都已正确格式化/转义。

$query = "INSERT INTO net_users VALUES (NULL,'$fname','$mname','$lname','$dob','$uname','$pasw','$phone1','$phone2','$email',NULL,NULL,NULL,'$date');";

虽然,我建议这样做。如果将用户输入连接到SQL查询,那么您刚刚打开了SQL注入的大门。你想要做的是使用“准备好的陈述”。您要做的是将?添加到您想要变量的查询中。然后将变量传递给单独的函数。没有引用,没有逃避,没有SQL注入的担忧。

$mysqli = new mysqli('localhost','root','','wisdom') or die("CONNECTION ERROR");
$query = $mysqli->prepare('INSERT INTO net_users VALUES (NULL,?,?,?,?,?,?,?,?,?,NULL,NULL,NULL,?)');

// No quoting or escaping needed, this passes the values separate from the query
$query->bind_param('ssssssssss', $fname, $mname, $lname, $dob, $uname, $pasw, $phone1, $phone2, $email, $date);

// This actually runs the query
$query->execute();

答案 2 :(得分:0)

您应该用单引号括起值。尝试在您的值中添加单引号。

$query = "INSERT INTO net_users VALUES (NULL,'$fname','$mname','$lname','$dob','$uname','$pasw','$phone1','$phone2','$email',NULL,NULL,NULL,'$date');";

您还有sql injection attack的风险。建议您改为使用bind_param()