0

私は現在、このコード行にエラーが見つからない状態にあります。PHPを使用してmysqlデータベースにいくつかのデータを追加しようとしています。

「SQL構文にエラーがあります。5行目の''、'geo')'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。誰かを登録しようとするとエラーメッセージが表示されます。「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列に挿入しています。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."')";

idfiledをint PRIMARY KEYとのように定義したため、これはおそらく機能していませんAUTO_INCREMENT

mysql_*また、SQL拒否の脆弱性につながる方法で、古い関数を使用しています。プリペアドステートメントでPDOを使用できます。

更新

于 2012-07-14T11:13:07.257 に答える
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();
于 2012-07-14T11:18:12.210 に答える