0

私のウェブページには次のようなリンクがあります: http://test.com/index.php?function=news&id=88

したがって、88 の後に ' を置くたびに、次のエラーが発生します。

そこで、mysql_real_escape_string() について読みましたが、ID が投稿されず、このエラーの発生を防ぐ方法がわかりません。

function news()
{
$query = mysql_query("SELECT * FROM news WHERE id=".$_GET['id']."");
while($news = mysql_fetch_row($query)) 
{
    ...
}
}
4

4 に答える 4

5

簡単な方法は、id が次のような整数である場合、id を整数にキャストすることです。

$id = (int)$_GET['id'];

ただし、準備済みステートメントで pdo または mysqli を使用することを強くお勧めします。

http://php.net/manual/en/book.pdo.php

http://php.net/manual/en/book.mysqli.php

于 2013-07-09T16:34:59.520 に答える
0

コードは、クエリがチェックなしで成功したと想定しています。デバッグの目的で、「or die(mysql_error())」行をmysql_query()ステートメントの最後に追加します。

$query = mysql_query("SELECT * FROM news WHERE id=".$_GET['id']."") or die( mysql_query() );

本番アプリケーションでより堅牢なエラー処理を行うには、値を確認し、$queryfalse の場合はエラーをログに記録します。

if (false === $query ) {
    // Log error and/or notify an administrator
} 
else { 
    while($news = mysql_fetch_row($query)) ...

他の回答で指摘されているようにid、クエリは整数になると想定しているため、パラメーターの値が整数であることを確認する必要があります。キャストすることでこれを行うことができます:

(int)$_GET['id']

またはより堅牢な型チェックを介して

if ( !is_numeric( $_GET['id'] ) ) {
    // Take appropriate action
}
else {
    // Create and execute the query
于 2013-07-09T16:39:17.043 に答える