我只是第一次尝试使用新方法,因为我被建议开始使用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的专业人士
提前致谢
答案 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。第一个更灵活。