0

これはとても単純なはずですが、それは私を夢中にさせています。いくつかのフォーム フィールドからデータベースにいくつかの値を挿入しようとしていますが、小数しか保存されません。私はとても混乱しています。

たとえば、これはフォームフィールドから正しい値をエコーアウトするので、それらの値が渡されていることがわかります...

echo "Trying to insert $posttime, $name, $agency, $message"; 
// The above correctly outputs this: Trying to insert 1344548784, Mike, Test, Test 

しかし、以下の SQL クエリは、テキスト フィールドに数値を使用した場合にのみ機能し、それ以外は機能しません。(私はphpmyadminを使って確認しています)

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ($posttime, $name, $agency, $message)");

テストとして、値をハードコーディングすると、このクエリは機能します。私はとても混乱しています…</p>

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES (1344548784, 'Mike', 'Test', 'Test')");
4

3 に答える 3

1

データを挿入するときは、テキスト フィールドを引用符で囲みます。これらは PHP の変数ですが、文字列であることをデータベースに伝える必要があります。これは引用符で行います。

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ($posttime, '$name', '$agency', '$message')");

また、mysql_*関数は実際には少し古いため、PDO または mysqli への移行を検討する必要があります。

于 2012-08-09T22:20:41.100 に答える
0

まず第一に: 非推奨の mysql 拡張機能の使用をやめてください! PDO または mysqli に切り替えます。

これらのテクノロジーのいずれかを使用すると、準備済みステートメントを使用して、値をパラメーターとして渡すことができます。また、オブジェクト指向プログラミング スタイルを使用することもできます。

例:

// Assuming $link is a valid connection resource

// Prepare statement
$statement = mysqli_prepare($link, "INSERT INTO mytable (id, from_name, from_agency, message) VALUES (?, ?, ?, ?)");

// Bind parameters
mysqli_stmt_bind_param($statement, 'i', $posttime);
mysqli_stmt_bind_param($statement, 's', $name);
mysqli_stmt_bind_param($statement, 's', $agency);
mysqli_stmt_bind_param($statement, 's', $message);

// Execute
$result = mysqli_stmt_execute($statement);

これにより、SQL インジェクションに対して脆弱ではなくなります。

于 2012-08-09T22:21:22.067 に答える
0

あなたの不足している引用符:

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ('$posttime', '$name', '$agency', '$message')")
于 2012-08-09T22:22:47.747 に答える