0

SQLステートメント内の変数に一重引用符を追加するにはどうすればよいですか?'\ $ user'\変数の代わりに'jeremy'を配置すると、完全に機能します。SQLステートメントの変数の引用符をエスケープする方法がわかりません。ご協力ありがとうございました。

  $resultArticles = mysql_query("SELECT COUNT(id) FROM articleList WHERE user = '\$user'\ ");
  $totalArticlesLeaderboard = mysql_result($resultArticles, 0);
  echo "<strong>Total Articles: </strong>" . $totalArticlesLeaderboard;
4

4 に答える 4

2

mysql_*私はあなたの質問の適切な複製を見つけようとしましたが、古代の機能に基づいた本物の複製しか見つかりませんでした。(mysql_*使用しているもののような)関数は、PHPコミュニティによって(しばらくの間)維持されなくなり、非推奨プロセスが開始されました。赤いボックスが表示されますか?

あなたは本当により良いPDOまたはMySQLiを手に入れようとするべきです。これらのオプションはどちらも問題ありません。Imho PDOのAPIは優れていますが、mysqlimysqlに向いています(ほとんどの場合、PDOは使用したいことをすべて実行します)。

2つの「新しい」APIを使用すると、プリペアドステートメントを使用することもできます。プリペアドステートメントを使用すると、値をクエリに挿入する前に手動で値をエスケープすることを心配する必要はありません。

PDOAPIを使用したこの例は次のとおりです。

$db = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $db->prepare('SELECT COUNT(id) FROM articleList WHERE user = :user');
$stmt->execute(array('user' => $user));

ご覧のとおり、値はクエリに直接挿入されませんが、代わりにプレースホルダーを使用します。このコードは、人々がクエリに任意のSQLを挿入することを不可能にします。また、もうエスケープする必要はありません。

PDOとmysqlのどちらを使用するかを決定する際にさらにヘルプが必要な場合は、それに関する詳細情報が記載されたドキュメントを確認してください。PDOを選択した場合は、このトピックに関する優れたチュートリアルをここで見つけることができます。

于 2012-11-21T21:08:04.500 に答える
1

これをテストする

$resultArticles = sprintf("SELECT COUNT(id) FROM articleList WHERE user='%s", 
mysql_real_escape_string($user));
于 2012-11-21T20:56:43.500 に答える
0

エスケープ文字を削除できるはずです。

$user = mysql_real_escape_string($user);
$resultArticles = mysql_query("SELECT COUNT(id) FROM articleList WHERE user = '$user'");

変数で問題が発生した場合は、いつでも文字列を終了して連結することができます。私は混乱を避けるためにこれを頻繁に行います:

$user = mysql_real_escape_string($user);
$resultArticles = mysql_query("SELECT COUNT(id) FROM articleList WHERE user = '".$user."'");

PeeHaaが言ったように、必ずPDOまたはMySQLiを使用してみてください。

すべてのユーザー入力をエスケープすることを忘れないでください。そうしないと、データベースが破壊される可能性があります。MySQLiを使用している場合は、mysqli::real_escape_stringを使用できます。すべてのユーザーデータをサニタイズすることは絶対に不可欠です。これをスキップしないでください!

于 2012-11-21T20:53:45.707 に答える
0

変数$userに特殊文字が含まれている場合は、最初の回答に示すように、これらをエスケープする必要があります。mysql_real_escape_string()関数を使用できない場合は、addslashes()を使用してください。

于 2012-11-21T21:04:30.563 に答える