2017-03-23 1 views
-2

私はデータベースから値を取得するために以下の方法を使用しています( "$ column"カラムから)、意図したとおりに動作していますが、 SELECTステートメントで追加される "$ column"変数。注射からできるだけ安全になるようにする(?タイプのプレースホルダーで準備するか、適切にエスケープする)。最も現代的で安全なアプローチは何でしょうか? 注:$qry->bind_param("ss",$column,$rowName);と2?プレースホルダは機能しません。カラム名にSELECT文の変数を使用する

$column = $_POST['column']; 
$rowName = $_POST['rowName']; 

$qry = $connection->prepare("SELECT $column FROM database_name WHERE row_name=?"); 
$qry->bind_param("s",$rowName); 
$qry->execute(); 
$result = $qry->get_result(); 
+2

あなたは、テーブル名とカラム名を用意することはできませんが、あなたは、列のホワイトリストと照合し、変数を使用することができます。 –

+0

この質問はなぜ再開されましたか?誰がそれを再開したのですか? –

+0

"who"のために、私はちょうど誰が見つかった:[YCS](http://stackoverflow.com/users/285587/your-common-sense)=> http://stackoverflow.com/posts/42986569/revisions - 彼はOPが投稿した* "注:$ qry-> bind_param(" ss "、$ column、$ rowName)に基づいて、2人のプレースホルダーが機能しない理由を持っていませんでした" * –

答えて

0
$column = $_POST['column']; 
$rowName = $_POST['rowName']; 

$qry = $connection->prepare("SELECT * FROM database_name WHERE row_name=?"); 
$qry->bind_param("s",$rowName); 
$qry->execute(); 
$result = $qry->get_result(); 
$value = $result[$column]; 
+0

それは確かに完全に受け入れられる解決策ですが、私は多くの列と多くのそのような検索があった場合、最初に必要な列を選択するだけではコストがかかりませんか? – greencookie

+0

このコードは質問に答えるかもしれませんが、このコードが質問に答える理由と理由についての追加の文脈を提供することで、長期的な価値が向上します。 –

+0

@greencookie *このような検索がたくさんある場合は、最適化する時間になります。実際にはあなたはしません。 –

関連する問題