2017-03-24 12 views
-2

PHP/MySQLの私は、このエラーになっておくキープ構文エラーを取得(PHP/MySQLの)

:「あなたはあなたのSQL構文でエラーが発生している。右の構文についてはMySQLサーバのバージョンに対応するマニュアルをチェックします1行目付近で '1'を使用する。

私はこのクエリを実現させるために努力しています。それは動作し、mysqlデータベースに挿入されますが、このエラーは毎回表示されます。私は同じ行のすべてを使い、二重引用符を一重引用符に変更し、samen行のすべてを挿入するすべての空白を削除し、変数({$ variable}を '$ variable'に渡す方法を変更しました)その他のすべて。私はこれに関連したいくつかのstackoverflowの質問を見ましたが、さまざまな解決策があります。 数値フィールドに ''を渡すことはできません。

私は今オプションがありません。助けが必要! このエラーはここ

がコードで示したが、データが正しく、私のテーブルに挿入されて保持します:

$user_id = get_current_user_id(); 
$prescription_name = $_POST['prescription_name']; 
$date_created = date('Y-m-d'); 
$last_updated = date('Y-m-d'); 
$right_eye_sphere = $_POST['right_eye_sphere']; 
$left_eye_sphere = $_POST['left_eye_sphere']; 
$right_eye_cylinder = $_POST['right_eye_cylinder']; 
$left_eye_cylinder = $_POST['left_eye_cylinder']; 
$right_eye_axis = $_POST['right_eye_axis']; 
$left_eye_axis = $_POST['left_eye_axis']; 
$pd = $_POST['pd']; 
$date_of_birth = $_POST['date_of_birth']; 
$file_path = $_POST['file_path']; 

$add_query = "INSERT INTO wew_prescription (
     prescription_id, 
     user_id, 
     prescription_name, 
     date_created, 
     last_updated, 
     right_eye_sphere, 
     left_eye_sphere, 
     right_eye_cylinder, 
     left_eye_cylinder, 
     right_eye_axis, 
     left_eye_axis, 
     pd, 
     date_of_birth, 
     file_path 
     ) Values (
     NULL, 
     {$user_id}, 
     '{$prescription_name}', 
     '{$date_created}', 
     '{$last_updated}', 
     '{$right_eye_sphere}', 
     '{$left_eye_sphere}', 
     '{$right_eye_cylinder}', 
     '{$left_eye_cylinder}', 
     '{$right_eye_axis}', 
     '{$left_eye_axis}', 
     '{$pd}', 
     '{$date_of_birth}', 
     '{$file_path}' 
     )"; 

    $sql = $dbCon->query($add_query); 

    if (!mysqli_query($dbCon,$sql)){ 
     die('Error: ' . mysqli_error($dbCon)); 
    }else{ 
     mysqli_query($dbCon,$sql); 
     echo "dados atualizados!"; 
    } 
+0

あなたのスクリプトは[SQLインジェクション攻撃](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)の危険にさらされています。 [Little Bobby Tables](http://bobby-tables.com/)[入力を逃れている場合でも、安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets -around-mysql-real-escape-string)[prepared parameterized statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用してください。 –

+0

オブジェクト指向スタイルの関数呼び出し '$ con-> query($ sql)'と手続き関数呼び出し 'mysqli_query($ con、$ sql)'を混在させることは珍しいことです。クエリの実行結果を '$ sql'という名前の変数に代入するのはちょっと奇妙です。それは単なる変数名です。何でもかまいません。しかし、 '$ sql'という名前の変数に何かを代入しようとすると、それはSQLテキストになります。文字列の値は' $ add_query'に代入されます。 Barmarが言うように、コードは文字列 '' 1 ''を実行しています。 – spencer7593

+0

ありがとうございました!私は準備されたパラメータ化されたステートメントを調べます!私はMySQLを学ぶフロントエンドの開発者です –

答えて

2

エラーがこの行から来ている:

if (!mysqli_query($dbCon,$sql)){ 

$sqlは、結果が含まれています

$dbCon->query($add_query); 

このクエリが成功したのでul、$sqlTRUEを含む。

if (!mysqli_query($dbCon, "1")) { 

有効なクエリではありませんので、あなたがエラーを取得すること:mysqli_query()はあなたが効果的にやっているので、そうTRUEは、"1"なり、文字列であることを第二引数が必要です。

私はあなたが本当にして行うために何を意味するのかと思う:

if (!$sql) { 
    die('Error: ' . $dbCon->error); 
} else { 
    echo "dados atualizados!"; 
} 

あなたが繰り返しmysqli_query()を呼び出しておく必要はありません。

また、SQLインジェクションを防ぐために、変数をクエリに代入する代わりに、プリペアドステートメントを使用してコードする方法も学習する必要があります。

+0

ありがとうBarmar!私は、下の質問ではなく、考えて立ち往生しました! –

+0

私はコードを少し違って修正したいと思います。割り当てを行う行を '$ sql'に変更するだけです..." ** '$ sql = $ add_query;' ** ' – spencer7593

+0

これは間違っているでしょう。なぜなら、 'if'の中で' mysqli_query() 'を2回呼び出すからです。 – Barmar

関連する問題