1

素晴らしいサイト、私は自分で修正した単純な問題に出くわしましたが(確かに)、私は自分の修正を真の解決策ではなくボッジと呼んでいるので、ここで本当の答えを求めています.

PHP でいくつかの単純なデータを mysql データベースに書き込むために、次の $sql 文字列があります。

$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, $scores_csv)";

$scores_csv には '60,90,45,26,41,80' のようなものが含まれていますが、上記のコードは機能しませんか?? 上記のコードを次のコードに置き換えると、動作します:-

$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, '60,90,45,26,41,80')";

私は $sql をエコーアウトし、カンマ区切りのリストを含む文字列には、最初のコード例では一重引用符が含まれていませんが、2 番目のコード例では含まれているため、機能します。

そのため、一重引用符を含めない場合は文字列ですが、データベースの不一致があり、データが保存されていません。

MYSQL に送信する前に $scores_csv 変数を一重引用符で囲むと動作しますが、より良い解決策があることは確かです。文字列がテキスト文字列であり、数字の集まりではないことを Mysql に伝えるにはどうすればよいでしょうか。それは単純なことですが、これまでにこれに出くわしたことはありません。

ありがとうポール

4

3 に答える 3

1

$scores_csv変数を引用符で囲む必要があります。

これを試して:

$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, '$scores_csv')";
于 2013-06-12T12:14:08.880 に答える
1

PDOなどのクエリにハイレベル ライブラリを使用し、prepare ステートメントを使用することをお勧めします (データ バインディング用)。

$sth = $dbh->prepare('INSERT INTO ? (`game_id` ,`user_id` ,`scores`) VALUES (NULL, ?, ?)');
$sth->execute(array($db_name.$tbl_name, $session_id, $scores_csv));

このようにして、 SQL インジェクションからも救われます

于 2013-06-12T12:20:59.627 に答える
0
$scores_csv = "'".$scores_csv."'";
$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, $scores_csv)";
于 2013-06-12T12:14:56.610 に答える