0

ここで私の問題は次のとおりです。

PHP から自動インクリメント列に挿入できません

(unless I set the insert values to: '','','','$postdate','posttime').

ただし、phpmyadminで以下のDEBUGGED挿入ステートメントを使用した場合、心配はありませんでした。したがって、php コードからの挿入を妨げるものがあります。

これは私のコードです:

$qinsert    =   "INSERT INTO `post` (text,sender,text_stamp,post_date,post_time) VALUES ('$message','$sender_id','$date','$postdate','$posttime')";
$finsert    =   mysql_query($qinsert);
$postID     =   mysql_insert_id();

これは、デバッガーからの出力です。

 Date: Fri, 29 Mar 2013 11:02:53 -0400
 Sender: User's Name 
Message:
 Message Text
 Attachment: 
 Post-Date: 2013-03-29
 Post-Time: 08:02:55

 Q-INSRT: INSERT INTO `post` (text,sender,text_stamp,post_date,post_time) VALUES ('Message Text','User's Name ','Fri, 29 Mar 2013 11:02:53 -0400','2013-03-29','08:02:55')
  F-INST: 
  Post-ID: 
4

3 に答える 3

1

変数を配列に入れる前にエスケープしていますか? あなたのサンプル クエリでテキストとユーザー名が置き換えられたのか、それともそのままコピー アンド ペーストされたのかはわかりません。後者を想定するので、クエリをよく見てください。

[...] VALUES ('Message Text','User's Name ','Fri, [...]

「ユーザー名」の途中にアポストロフィがあるため、クエリが壊れています。クエリに挿入する前に、各変数で mysql_real_escape_string($variable) を実行していることを確認してください。

$message_text = mysql_real_escape_string($_POST['message_text']);
$user_name = mysql_real_escape_string($_POST['user_name']);
$query = "INSERT INTO table (text, username) values ('$message_text', '$user_name')";
mysql_query($query);
于 2013-03-29T15:22:08.780 に答える
0

文字列をエスケープする必要がありUser's Name、単一引用符が含まれています。関数も使用しないmysql_でください。これらは非推奨です。ただし、主張する場合は、次mysql_real_escape_string()のように使用します。

$qinsert    =   "INSERT INTO `post` (text,sender,text_stamp,post_date,post_time) VALUES ('" . mysql_real_escape_string($message) . "','" . mysql_real_escape_string($sender_id). " ','$date','$postdate','$posttime')";

メッセージと送信者だけでなく、おそらくすべての文字列をエスケープする必要があります。

理想的には、次のように代わりに PDO を使用する必要があります。

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

$dbh = new PDO($dsn, $user, $password);
$sth = $dbh->prepare(
  "INSERT INTO post (text,sender,text_stamp,post_date,post_time) VALUES " .
  "(:message, :sender_id, :date, :postdate, :posttime)"
);
$sth->execute(array(
  ':message' => $message,
  ':sender_id' => $sender_id,
  ':date' => $date,
  ':postdate' => $postdate,
  ':posttime' => $posttime
));
于 2013-03-29T15:21:51.100 に答える