0

eval コードを作成しようとしましたが、何か問題があり、エラーが見つかりません。

私はこれを持っています:

解析エラー: /Applications/XAMPP/xamppfiles/htdocs/classes/databasehandler.php(57) の構文エラー、予期しない ',' : 行 1 の eval()'d コード

コードは次のとおりです。

eval("$s->bind_param('".$binds."', ".$values.");");

$BINDS ARE: ss
$VALUES ARE: 'testing','hej123'
4

3 に答える 3

1

なぜeval()これを使用しているのですか?次のように達成できます。

$binds = 'si';
$values = array('a string', 4609);
$args = array($binds) + $values;
call_user_func_array(array($s, 'bind_param'), $args);

上記のコードはより速く (新しい実行コンテキストを呼び出さない)、より安全です (変数は直接渡され、エスケープに関する仮定はありません)。

于 2012-09-10T10:27:50.413 に答える
1

二重引用符は PHP によって解析されるため、eval("$s->bind_param...");と等しくなりeval($s."->bind_param...');ます。二重引用符を一重引用符に置き換えると、EVILコードが機能します。

値がコンマで区切られていることが確実な場合は、自分で配列を作成してみませんか?

$values = explode(',',preg_replace('/[\'"]/g','',$values));

それともそのようなものですか?

于 2012-09-10T10:29:10.170 に答える
0

Eval は使用しないでください。パラメーターをクエリにバインドするような些細なことには使用しないでください。

于 2012-09-10T10:27:53.277 に答える