0

すべてのサーバーの詳細が正しく配置され、接続が正しく行われますが、出力に表示される構文エラーが見つからないようです。

<?php
    ob_start();
    $phn=$_GET['phn'];
    $con = mysql_connect("<server>","<user>","<pass>") or die('error' . mysql_error());
    $db_selected = mysql_select_db('<db name>', $con);
    if (!$db_selected) {
        die ('Can\'t use user : ' . mysql_error());
    }
    $characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
     $key= '';
     for ($i = 0; $i < 9; $i++) {
          $key.= $characters[rand(0, strlen($characters) - 1)];
     }
     echo $key;
    $sql="INSERT INTO buser (phone, key) VALUES (".$phn.",'".$key."')";
    if($result = mysql_query($sql ,$con) or die ('Error: '.mysql_error ()))
    {
    $q="SELECT * FROM buser WHERE phone=$phn";
    $idd=mysql_query($q,$con) or die ('Error: '.mysql_error ());
    while($row = mysql_fetch_assoc($idd))
      {
      $id=$row['bid'];
      }
    }
     ?>

出力:

エラー: SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'key) VALUES (9999,'ywfjj2dtc')' 付近で使用する正しい構文を確認してください。

4

1 に答える 1

5

KEYMySQL の予約キーワードです。列またはテーブルの識別子として使用するには、バッククォートで囲む必要があります。

$sql="INSERT INTO buser (phone, `key`) VALUES (".$phn.",'".$key."')";

スクリプトは、現在の形式では SQL インジェクションに対して脆弱です。少なくとも、の値を呼び出す必要があります。mysql_real_escape_string()$phn

$phn = mysql_real_escape_string($_GET['phn']);  

長期的には、MySQLi や PDO などの準備済みステートメントをサポートする API に切り替えることを検討してください。

于 2013-02-04T15:46:41.883 に答える