0

我只是第一次尝试使用新方法,因为有人建议我开始使用 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

有两种方法:

$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 回答