2017-03-08 11 views
-1

私は変わるIDに基づいて、テーブルを作成しようとしていますが、私は構文エラーが返されます:PHP - MySQLの構文エラー(修正するには?)

FAIL2:あなたのSQL構文でエラーが発生しています;ライン1

@mysql_select_db('mydb'); // Connect to database 

// Create Table 
$tl = $myID[1]; 
$sqltable = $tl[0]; // Get first char from id 

$sql = "CREATE TABLE IF NOT EXISTS $sqltable(myID varchar(255),Data varchar(255),Related varchar(255));"; 
$retval = mysql_query($sql, $conn); 
if(! $retval) { 
    die('FAIL2: ' . mysql_error()); 
} 
echo "DONE<br>"; 
で '(、MYIDのVARCHAR(255)、データはvarchar(255)、関連VARCHAR(255))の5' 近くで使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください

これはどのように修正できますか?

+0

'Data'は[resrved単語]である(https://dev.mysql.com/doc/refman/5.5 /en/keywords.html)。バッククックを使用する。 –

+0

テーブル名は '$ sqltable'の数字だけではできません。 – niceman

+0

なぜ「5」というテーブルを作成しようとしていますか?一つは、SQLはそれを許さないということです。もっと重要なことは、将来のクエリでのあいまいさに対する公式の招待状のように思えます。 – David

答えて

1

一例として、あなたが 準備された文はパラメータがSQL文にバインドするだけを許可し、テーブル名でプリペアドステートメントを使用できない場合にはmysqliの_ **

$link = mysqli_connect('localhost', 'user', 'pass', 'test'); 
/* check connection */ 
if (!$link) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 
$sqltable = 1234; 
$stmt = mysqli_prepare($link, "CREATE TABLE IF NOT EXISTS `{$sqltable}` (
     `myID` varchar(255), 
     `Data_` varchar(255), 
     `Related` varchar(255) 
     );" 
); 
if (mysqli_stmt_execute($stmt)) { 
    echo "success"; 
} else { 
    echo "failure"; 
} 
mysqli_stmt_close($stmt); 
  • を使用して、これを試してみてくださいSQL文自体の妥当性を判断し、実行時に変更すると有効なSQL文が変更される可能性があるため、表名は実行時値の1つではありません。
  • SQLインジェクションを避けるために、変数$ sqltableがユーザー入力から来ている場合に最初にチェックするテーブル名のホワイトリストが必要です。

  • 変更カラム 'データ'、それは、MySQL

    にreserverdワードである
+0

ありがとう便利です – zeddex

関連する問題