0

私はデータテーブルを扱っており、カスタム WHERE 句を作成しようとしています。次のコードがあります。

$sWhere = "WHERE office=".$varOffice;
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
{
    $sWhere = "WHERE (";
    for ( $i=0 ; $i<count($aColumns) ; $i++ )
    {
        if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" )
        {
            $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
        }
    }
    $sWhere = substr_replace( $sWhere, "", -3 );
    $sWhere .= ') AND office='.$varOffice;
}

デバッグ後、MySQL がエラーをスローしていることを発見しました。エラー 1605。

ここで見つかったものをエコーすることにし$sQueryました:

$sQuery = "
        SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
        FROM   $sTable
        $sWhere
        $sOrder
        $sLimit
        ";

次に、次のように WHERE 句に引用符がないため、エラーが発生したことがわかりました。

SELECT SQL_CALC_FOUND_ROWS `amount_due_owed`, `amount_paid`, `amount_remaining`, `reference_number` FROM accounting WHERE office=Office 1 

次のようになります。

WHERE office='Office 1'

私は試してきましたが、それを理解することができませんでした。変数を一重引用符で囲むにはどうすればよいですか?

4

1 に答える 1

2

Add the single quotes in your first line:

$sWhere = "WHERE office='".$varOffice."'";

Also: If you just go around inserting random $_GET variables into your SQL queries, you're eventually going to have a bad time. Please use PDO or something a little safer (even mysql_real_escape_string() is not that safe.).

于 2013-01-10T21:29:06.310 に答える