我目前处于不在这行代码中发现任何错误的情况。我正在尝试使用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;";
?>
答案 0 :(得分: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
列。尝试修复它,删除id
和''
,还有一些引用相关的问题:
$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 KEY
AUTO_INCREMENT
。
此外,您正在使用旧的mysql_*
函数,其方式导致sql inejction漏洞。您可以将PDO用于预处理语句。
<强>更新强>:
答案 1 :(得分:0)
问题是查询会中断,因为'$_GET["regname"]'
之类的所有字词都会使用"
来破解它。如果您想这样做,可以使用连接:
$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();