-1

私はクエリを実行するためにMySQLをそのように使用しています:

public function query($query, $params = array(), $format = array()) {

    if ( !is_array( $params ) ) return false;

    $dbh = parent::$dbh;

    if ( empty($dbh) ) return false;

    $stmt = $dbh->prepare($query);

    if ( !empty($format)) {
        $values = array_values($params);
        foreach ( $format as $key => $bind ) {
            switch ($bind) {
                case '%d':
                    $stmt->bindValue($key + 1, $values[$key], PDO::PARAM_INT);
                    break;
                case '%s':
                    $stmt->bindValue($key + 1, $values[$key], PDO::PARAM_STR);
                    break;
                default:
                    $stmt->bindValue($key + 1, $values[$key], PDO::PARAM_STR);
                    break;
            }

        }
    }

    $stmt->execute($params);

    return $stmt;

}

LIKE を使用する検索から無効な文字を安全に削除するにはどうすればよいですか?

例えば:

 $filter = "filter's";

 if (isset($filter)) {
    $search_filter = 'content LIKE \'%'.$filter.'%\'';

    $sql = "SELECT $search_filter FROM  messages";

    $stmt = $this->query($sql);
}
4

2 に答える 2

1

最も簡単な方法は、PDO::quote を使用することです

$search_field の割り当てを変更する

$search_filter = 'content like '.$dbh->quote("%".$filter."%");

パラメータ化されたクエリに移行したい場合は、

$sql = "select * from messages where content like ?";
$params = "%".$filter."%";
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
于 2013-07-17T16:56:28.713 に答える