0

DB のクエリに古いメソッドの代わりに PDO メソッドを使用するように勧められたため、新しいメソッドを使用するのは初めての試みです。

以前の古い変数で行っていたように、変数を変数に配置する方法がわかりません。

ここに私のスクリプトの古いバージョンがあります

$file_code = filter_input( INPUT_GET, 'fileid' );
$res = mysql_query("SELECT * FROM `Files` WHERE `fileID`='".$file_code."'") or die ( mysql_error() );
if(mysql_num_rows($res) == 0)
{
die(header("Location: error.php"));
} 
$info = mysql_fetch_assoc($res);

そして、これが新しい方法を使用して同じ結果を達成しようとする私の試みです

$file_code = filter_input( INPUT_GET, 'fileid' );
$db = new PDO($host,$db_name,$db_user,$db_pass);
$res = $db->prepare('SELECT * FROM Files WHERE fileID = :".$file_code."');

私はphpのプロではないので、助けてください。

前もって感謝します

4

3 に答える 3

1
$file_code = filter_input(INPUT_GET, 'fileid');
$db = new PDO("mysql:host=$host;dbname=$dbname;","login","pass");

$res = $db->prepare('SELECT * FROM Files WHERE fileID = ?')
                                          ->execute(array($file_code));

$result = $res->fetchAll();
于 2013-03-06T18:36:03.050 に答える
1
$res = $db->prepare('SELECT * FROM Files WHERE fileID = :".$file_code."');

ここで行っていることは、プリペアドステートメントの概念全体を実際に否定していることです。

これはあなたがすべきことです:

$res = $db->prepare('SELECT * FROM Files WHERE fileID = ?');
$res->execute(array($file_code));
$data=$res->fetchAll();

プリペアドステートメントの利点は、変数をエスケープする必要がないことです。また、実行回数を増やすと効率が向上します。

于 2013-03-06T18:37:17.083 に答える
1

次の 2 つの方法があります。

$stmt = $db->prepare('SELECT * FROM Files WHERE fileID = :file_code');
$stmt->bindParam(':file_code', $file_code);
$stmt->execute();

または

$stmt = $db->prepare('SELECT * FROM Files WHERE fileID = :file_code');
$stmt->execute(array(':file_code' => $file_code));

したがって、PDOStatement::bindParamを実行して値を渡すか、配列として直接 PDOStatement::execute に渡すことができます。最初のものははるかに柔軟です。

于 2013-03-06T18:40:20.643 に答える