2016-12-19 14 views
-1

こんにちは、イムは、SQLと私は現在、Webサイトを使用してSQLデータベースにいくつかのデータを保存しようとしています。しかし、私はそれを実行するたびにいくつかの構文エラーを取得し、今私はここに誰かが答えを知っていた、または正しい方向に私を導くことができる期待していた多くの時間の後に見て:)エラーSQL構文

これは私が私のボタンを提出する:

Picture of database

0You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[Campus one],[101],[2016-12-08],[test])' at line 1

これはスクリプトの挿入部で、接続部は、細かい

$sql = "INSERT INTO `formel`(`Område`, `Værelse`, `Dato`, `TV Fjernsyn Forlænger`) VALUES ([$area],[$filnavn],[$dato],[$Fjernsyn]) "; 

SQL情報を実行しているように見えます

+0

ために準備されたステートメントを使用することをお勧めだろうが、それはfieldistエラーで」未知の列を取得し始めたが、私はそれが原因speciel文字にproperblyだった考え出し私はthoeseを取り除き、datoとfjernsynを試してみました。私がDBを見ていると、入力が全くないので、完全に白くなっています。( –

答えて

3

あなたの値から変更する必要があります:あなたは本当にかかわらず、あなたのparamsを結合する必要があります

'{$area}','{$filnavn}','{$dato}','{$Fjernsyn}'

:に

[$area],[$filnavn],[$dato],[$Fjernsyn]

。私はあなたがもう使用してはならないmysql_を使用していると仮定します。したがって、mysqli_またはPDOを調べることをお勧めします。

編集:

あなたが公正でPDOに上に移動する必要があり、私がやったと私はそれを愛します!

それはので、私はあなたに私の入力をあげる動作するように滑らかな印象の方法だと私は授業でたくさんの仕事

自分dbConfig.phpファイル作成します:私は半分だからだから、

class Database 
{ 
    private $host = "localhost"; 
    private $db_name = "dbName"; 
    private $username = "username"; 
    private $password = "password"; 
    public $conn; 

    public function dbConnection() 
    { 

     $this->conn = null; 
     try 
     { 
      $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password); 
      $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } 
     catch(PDOException $exception) 
     { 
      echo "Connection error: " . $exception->getMessage(); 
     } 

     return $this->conn; 
    } 
} 

怠け者で、なぜコードを何度も何度も繰り返していますか?

自分でdbCommon.phpファイルを作成します。

class DBCommon 
{ 
    private $conn; 

    /** @var Common */ 
    public $common; 

    public function __construct() 
    { 
     $database = new Database(); 
     $db = $database->dbConnection(); 
     $this->conn = $db; 
    } 

    public function runQuery($sql) 
    { 
     $stmt = $this->conn->prepare($sql); 
     return $stmt; 
    } 
} 

次に、あなたのようなに入るためにあなたのPDOのクラスファイルを必要とする:あなたが呼び出すことになるあなたのfile.php内すると

require_once('dbCommon.php'); 

    class Update extends DBCommon 
    { 
     function __construct() 
     { 
      parent::__construct(); 
     } 

     public function updateCode($area, $filnavn, $dato, $Fjernsyn) 
     { 

      $stmt = $this->runQuery("INSERT INTO `formel` (`Område`, `Værelse`, `Dato`, `TV Fjernsyn Forlænger`) VALUES (:area, :filnavn, :dato, :Fjernsyn)"); 
      $stmt->bindParam(array(':area' => $area, ':filnavn' => $filnavn, ':dato' => $dato, ':Fjernsyn' => $Fjernsyn)); 
      $stmt->execute(); 
      echo "Your insert command has been completed!"; 


     } 
    } 

class.update.phpあなたがする必要があるクラス:

require_once ('class.update.php'); 

$update = new Update(); 

if (isset($_POST['send'])) 
{ 
    $update->updateCode($_POST['area'], $_POST['filnavn'], $_POST['dato'], $_POST['Fjernsyn']); 
} 

注:あなたはdidnのので$_POST['name']さんの投稿に私はあなたに基本的な例を与えました。

これはSQLインジェクションを防止するため、パラメータをバインドすることがベストプラクティスです。あなたがいけないのparams結合と

$stmt->bindParam();を実行する必要がありますが、単に$stmt->execute(array(':paramshere' => $paramVar));

を実行することができますそれは完全にあなたの好みに依存しますが、私はいつも(個人的な好みを)実行する前に結合好みます。代わりにPDOに移行する方法についていくつかのインプットと洞察を与えてくれることを願っていますが、それは本当に前進する方法です。

+0

私はこのエラーが発生しました:0Unknown column 'område' 'フィールドリスト' –

+0

私はそれがspecielの兆候のためにproberblyだと思ったとområdeとværelseを削除することを決めた、今はエラーがなくなって、それはただ白い画面に行くが、 :( –

+0

PHPエラーが発生しましたか? – Option

2

SQL injectionを防ぐには、実際にPrepared Statementsを使用するか、文字列を正しくエスケープする必要があります。 MySQLiまたはPDOをご覧ください。ここで

は、PHPの内部でPDOとプリペアドステートメントを使用して、基本的なチュートリアルです:

// Connect to the database: 
$db = new PDO('mysql:dbname=DB_NAME;host=localhost', 'DB_USER', 'DB_PASS'); 

// Prepare the statement: 
$ins = $db->prepare('INSERT INTO `formel` (`Område`, `Værelse`, `Dato`, `TV Fjernsyn Forlænger`) VALUES (:area, :filnavn, :dato, :Fjernsyn'); 

// Execute with bindings: 
$ins->execute(array( 
    ':area'  => $area, 
    ':filnavn' => $filnavn, 
    ':dato'  => $dato, 
    ':Fjernsyn' => $Fjernsyn 
)); 
+0

+ 1を使用します。これは、ほとんどの場合、パラメータを必要とするクエリを処理する最も優れた方法です。 – GordonM

0

$sql = "INSERT INTO `formel`(`Område`, `Værelse`, `Dato`, `TV Fjernsyn Forlænger`) VALUES ('$area','$filnavn','$dato','$Fjernsyn') "; 

私はそれが動作するはずだと思う、これを試してみてください。

+0

少なくとも誰かが$ Fjernsynを 'Robert 'に設定するまで); - DROP TABLEの学生; - どんなことでも:) https://xkcd.com/327/ – GordonM

0
は= " formelOmrådeVærelseDatoTV Fjernsyn Forlænger)VALUES( '$面積'、 '$ filnavn'、 '$のダト'、 '$ Fjernsyn')。INSERT INTO" この $ sqlをにあなたのクエリを変更し

しかし、私はあなたはそれが働いていた答え@BenMに変更した後に、セキュリティ目的