0

我目前处于在这行代码中找不到任何错误的情况。我正在尝试使用 PHP 将几个数据添加到 mysql 数据库。

当我尝试注册某人时,它会收到“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 '', 'geo')' 附近使用正确的语法”。“geo”是单选组元素的值。

<?php
if($_GET["regname"] && $_GET["regemail"] && $_GET["regpass1"] 
   && $_GET["regpass2"]&& $_GET["regfamilyname"] 
   && $_GET["reggivenname"] && $_GET["radioGroup"] )
{
    if($_GET["regpass1"]==$_GET["regpass2"])
    {
       $servername="localhost";
       $database="aaa";
       $username="bbbb";
       $password="cccc";

       $conn=  mysql_connect($servername,$username, $password) 
               or die(mysql_error());
       mysql_select_db($database,$conn);

       $sql="INSERT INTO users (username,password,familyname, 
             email, givenname, is_admin, created_time, category) values 
             ('" . $_GET["regname"] . "', '" .$_GET["regpass"]. "', '" 
             .$_GET["regfamilyname"]. "','" .$_GET["regemail"]. "', '" 
             .$_GET["reggivenname"]. "', '0', NOW()', '" 
             .$_GET["radioGroup"]. "')";

       $result=mysql_query($sql,$conn) or die(mysql_error());          
       print "<h1>You have registered sucessfully</h1>"; 
       print "<a href='index.php'>Go to login page</a>";
    }
    else print "Passwords doesnt match.";
}
    else print"Invalid data;";
?>
4

2 回答 2

0

很难说,因为你没有提供错误信息。

我猜错误在这里:

$sql="INSERT INTO users (id,username,password,familyname, email, givenname, is_admin, created_time, category) values ('','$_GET["regname"]', '$_GET["regpass"]', '$_GET["regfamilyname"]', '$_GET["regemail"]', '$_GET["reggivenname"]', '0', NOW()', '$radiobutton')";

您正在将空字符串插入id列中。尝试修复它,通过删除idand '',还有一些与引号相关的问题:

$sql="INSERT INTO users (username,password,familyname, email, givenname, is_admin, created_time, category) values ('".$_GET["regname"]."', '".$_GET["regpass"]."', '".$_GET["regfamilyname"]."', '".$_GET["regemail"]."', '".$_GET["reggivenname"]."', '0', NOW(), '".$radiobutton."')";

这可能不起作用,因为您已将id归档定义为int PRIMARY KEYwith AUTO_INCREMENT

此外,您正在使用旧mysql_*函数,这会导致 sql 注入漏洞。您可以将 PDO 与准备好的语句一起使用。

更新

于 2012-07-14T11:13:07.257 回答
0

问题是查询会中断,因为所有类似'$_GET["regname"]'which 的术语都会使用". 如果你想这样做,你可以使用连接:

$sql="INSERT INTO users (username,password,familyname, 
email, givenname, is_admin, created_time, category) values 
('" . $_GET["regname"] . "', '" .$_GET["regpass"]. "', '" .$_GET["regfamilyname"]. "',
  '" .$_GET["regemail"]. "', '" .$_GET["reggivenname"]. "', '0', 
  NOW()', '" . $radiobutton. "')";


但更好的做法是使用PDO。

一个例子:

$stmt = $dbh->prepare("INSERT INTO users (username,password,familyname, 
email, givenname, is_admin, created_time, category) values 
(:username,:password,:familyname,:email,:givenname,:is_admin,:created_time,:category)");

$taValues = array(
 'username'   =>  $_GET["regname"],
 'password'   =>  $_GET["regpass"],
 'familyname' =>  $_GET["regfamilyname"],
 'email'      =>  $_GET["regemail"],
 'givenname'  =>  $_GET["reggivenname"],
 'is_admin'   => '0',
 'created_time'  =>  NOW(),
 'category'      =>  $radiobutton
); 

PDOBindArray($stmt,$taValues);

$stmt->execute();
于 2012-07-14T11:18:12.210 回答