2016-04-07 23 views
-1


このコードには何が欠けているか教えてください。私はSQL構文エラーを取得するためです。SQL構文エラー(サーバーバージョン:5.6.17 - MySQL)

私は3つの列でテーブルを作成しました。 IDは自動自分に不利であると私は$の画像ここ

を挿入するときに問題が発生したと考えるとイメージBLOBデータ型

でエラーがある------- >>「あなたは、あなたのSQL構文でエラーが発生しています;あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が " #〜 I 27W ?Hl : o : ӏvm5V Onö"の近くで使用するようにしてください1行目で '`V'"

<?php 

if (isset($_POST["Upload"])) 
{ 
    include("DbConnection.php"); 

     $file = $_FILES['image']['tmp_name']; 


     if(!isset($file)) { 
      echo 'Please Select a File'; 
     } 
     else { 
      $image  = file_get_contents($_FILES['image']['tmp_name']); 
      $img_name = $_FILES['image']['name']; 
      $img_size = getimagesize($_FILES['image']['tmp_name']); 

      if ($img_size == false) 
         { 
       echo 'it is not a image'; 
         } 

     else 
     { 
      $query = mysqli_query($Con, "INSERT INTO `cars_tbl` (ID,Name,Image) VALUES ('','$img_name','$image')"); 
       if (!$query) 
       { 
        echo 'Error Executing Query '.mysqli_error($Con); 
        } 
        else 
        { 
         $last_ID = mysqli_insert_id($Con); 
         echo "Image Uploaded. <p /> Your Image : <p /> <img src='get.php?ID=".$last_ID."'" ; 
         } 


      } 

         } //else 
} // 1st IF 

else 
{ 
    echo 'Fill the details'; 
} 
?> 
+0

ここでコードを投稿してください。スクリーンショットを表示するのは良い習慣ではありません。助けてくれる人は誰でも再入力する必要があります。 –

+0

私は既に試してみました。それは問題ではありません。しかし、私は$画像を置くことなくクエリを実行する場合、エラーはありません。イメージファイルの問題。そういうわけで、外国の文字がエラーに表示されます。私は別の画像も試しました。 –

+0

ユーザ入力を扱うときの最初のルール:**決して**ユーザ入力を信頼しない。各アクションの前または後に適切にエスケープする必要があります。アップロードされたファイルはまだユーザー入力です。 – Arjan

答えて

1

あなたは

"で $img_nameをラップするのを忘れ
+0

番号。それはそうではありません。error ---->あなたはSQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が1行目の ' 'の近くで使用されるようにしてください。 –

+0

提出しようとしているファイル名は何ですか?英文の名前を –

+0

に変更しようとすると、すでにimage1、image2というように英語で名前が変更されています。 –

0

img_nameコンテンツではなく、名前として '$ img_name'という値を挿入しようとしています。以下試してください:

$query = mysqli_query($Con, "INSERT INTO `cars_tbl` (ID,Name,Image) VALUES ('','" . $img_name . "','" . $image . "')"); 
1

問題は、あなたがそれをエスケープせずにデータベースに明らかにblob保存されています。

あなたのコマンドには何が起こるのかを理解する必要があります。画像データは、バイナリなので '含むこともできます - あなたのSQLコマンドを無効にします。

それを保存するための方法を正しい方法:

1)

どちらのプリペアドステートメント

2)

mysqli_query($Con, "INSERT INTO `cars_tbl` (ID, Name, Image) 
    VALUES ('', '$img_name', '".mysqli_escape_string($image)."')"); 

と私はプリペアドステートメントを好むだろう。もう1つの質問は、IDを空の文字列に設定した理由です。

+0

PDOはすべての問題を解決する魔法の解決策ではありません。私は準備文を助言し、それらはmysqliでも利用可能です。可能であれば、私は準備された声明でPDOを好むでしょう。 – Arjan

+0

@Arjan Thx、私は不正確でした。回答が更新されました。 –