0

以下のコードで SQL を使用します。

public function saveOrder() {
  $id = $this->getUserId();
  $this->db->query("INSERT INTO orders VALUES (null, '$id', '$this->basket_lines', '$this->total', NOW() )");
  return $this->db->id();  
}

上記の最後の列がDATETIMEフィールドである場合、データベースの結果はデフォルトのまま0000-00-00 00:00:00です。

私も列形式を試してtimestamp使用しました:

ALTER TABLE  `content ` CHANGE  `date`  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

別の投稿からですが、役に立ちません。

誰が何が間違っているかを見つけることができますか?

ありがとう

編集:ところで、DBクラス内からSQLステートメントをエスケープしています

    $this->SQL = $this->mysqli->real_escape_string($SQL);
    $this->result = $this->mysqli->query($SQL);

編集2:私は今、プレクエリをエスケープしています

 $i=mysql_real_escape_string($id);
    $b=mysql_real_escape_string($this->basket_lines);
    $t=mysql_real_escape_string($this->total);
    $this->db->query("INSERT INTO orders VALUES (null, '$i', '$b', '$t', NOW() )"); 

まだ機能していませんが、これはすべて奇妙なことですか?

4

4 に答える 4

4

データをエスケープていません。おそらく、データが残りのクエリを台無しにしています。また、SQL インジェクションに対して無防備である可能性も非常に高いです。最低でも を使用する必要がありますが、 PDO で準備済みクエリmysql_real_escape_string()を使用することをお勧めします。

于 2012-04-05T14:03:22.557 に答える
1

If the field is of type TIMESTAMP

try

$this->db->query("INSERT INTO orders VALUES (null, '$id', '$this->basket_lines', '$this->total', CURRENT_TIMESTAMP() )");
于 2012-04-05T14:06:46.217 に答える
1

I don't see anything wrong with the query itself.

However I would like to advise you to read these 2 links.
http://nl.php.net/manual/en/book.pdo.php
http://nl3.php.net/manual/en/function.mysql-real-escape-string.php
The way you're using mysql is a HUGE security risk.

于 2012-04-05T14:07:25.430 に答える
1

エスケープの概念が間違っています。クエリ全体ではなく、SQL インジェクションを防ぐために、DB に挿入するデータをエスケープする必要があります。したがって、次のようにする必要があります。

$id=$this->mysqli->real_escape_string($id);
$basketlines=$this->mysqli->real_escape_string($this->basket_lines);
$total=$this->mysqli->real_escape_string($this->total);   
$SQL="INSERT INTO orders VALUES (null, '$id', '$basketlines', '$total', NOW() )");
$this->result = $this->mysqli->query($SQL);

クエリ全体をエスケープすると、クエリが不正な形式になり、有効な SQL クエリではなくなるため、すべての問題があると確信しています。

于 2012-04-05T14:42:11.097 に答える