试图将旧的mysql_query转换为新的PDO方法,如何创建变量元素

时间:2013-03-06 18:28:33

标签: php mysql pdo

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

提前致谢

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();

准备好的陈述的美妙之处在于,您不需要转义变量,而且如果再次运行它也会更有效。

答案 2 :(得分: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。第一个更灵活。