2

PDO Mydql で REGEXP を使用しようとしていますが、何か問題があります

function artist_list($artist){
            global $DBH;
$STH = $DBH->prepare("SELECT songs ,image ,artist,album,r_year
            FROM english_fm
            WHERE artist REGEXP \"^[:artist]\" 
             GROUP BY artist order by slno");
            $STH->bindValue(":artist" , "$artist", PDO::PARAM_STR); 
            $STH->execute();
            $STH->setFetchMode(PDO::FETCH_ASSOC);
            return $STH;
            $DBH = Null;
        } 

これは私が使用しているときは機能しませんREGEXP \"^[:artist]\" が、使用する場合

REGEXP \"^[$artist]\" 

できます

function artist_list($artist){
                global $DBH;
    $STH = $DBH->prepare("SELECT songs ,image ,artist,album,r_year
                FROM english_fm
                WHERE artist REGEXP \"^[$artist]\" 
                 GROUP BY artist order by slno");
                $STH->bindValue(":artist" , "$artist", PDO::PARAM_STR); 
                $STH->execute();
                $STH->setFetchMode(PDO::FETCH_ASSOC);
                return $STH;
                $DBH = Null;
            } 

助けてください

4

1 に答える 1

7

そのようなプリペアドステートメントは使用できません。プレースホルダーを宣言するときは、それらに対して関連することを行わないようにし、これをプレースホルダーの定義に任せます。したがって、たとえば、次のように使用できます。

$STH = $DBH->prepare("SELECT songs ,image ,artist,album,r_year
            FROM english_fm
            WHERE artist REGEXP :artist
            GROUP BY artist order by slno");
            $STH->bindValue(":artist" , "^[$artist]", PDO::PARAM_STR); 
于 2013-02-25T07:10:18.317 に答える