DBIモジュールmysql_real_escape_string()
の Perl 用の PHP と同じように機能する関数があるかどうか教えてもらえますか?
10993 次
5 に答える
16
プレースホルダーとバインド値を使用する必要があります。
于 2010-02-05T14:52:28.813 に答える
9
しないでください。エスケープ。SQL。
しないでください。見積もり。SQL。
SQL プレースホルダー/パラメーターを使用します ( ?
)。SQL ステートメントの構造とプレースホルダーによって表されるデータ値は完全に別々にデータベースに送信されるため、(データベース エンジンまたは DBD モジュールのバグを除けば) データ値が SQL として解釈される可能性はまったくありません。コマンド。
my $name = "Robert'); DROP TABLE Students; --";
my $sth = $dbh->prepare('SELECT id, age FROM Students WHERE name = ?');
$sth->execute($name); # Finds Little Bobby Tables without harming the db
副次的な利点として、プレースホルダーを使用すると、SQL ステートメントを再利用する場合 (一度だけ準備する必要がある場合) も効率的であり、そうでない場合 (準備を明示的に呼び出さない場合でも、効率は低下しません) になります。クエリが実行される前に暗黙的に呼び出されます)。
于 2010-02-06T11:02:08.160 に答える
5
引用のように?
utf8 について心配な場合は、 DBD::MySQLのドキュメントを読むこともお勧めします。
于 2010-02-05T14:06:12.117 に答える
2
http://www.stonehenge.com/merlyn/UnixReview/col58.htmlから:
SQL::Abstract を使用します。 ... 私の $sqa = SQL::Abstract->new; 私 ($所有者、$account_type) = @_; # 入力から my ($sql, @bind) = $sqa->select('account_data', # テーブル [qw(account_id balance)], # フィールド { account_owner => $所有者、 account_type => $account_type }、 # "どこ" ); 私の $sth = $dbh->prepare_cached($sql); # 可能であれば SQL を再利用する $sth->execute(@bind); # このクエリに対して実行する
于 2010-02-05T14:05:36.833 に答える
0
データベースハンドルメソッド "quote"
my $dbh = DBI->connect( ... );
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");
于 2015-11-05T14:25:18.637 に答える