【问题标题】:Trying to translate old mysql_query to new PDO method, how to create variable element [duplicate]试图将旧的 mysql_query 转换为新的 PDO 方法,如何创建变量元素 [重复]
【发布时间】:2013-03-06 18:28:33
【问题描述】:

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

提前致谢

【问题讨论】:

  • 感谢大家为我指明正确的方向,这正是我喜欢 Stackoverflow 的原因

标签: php mysql pdo


【解决方案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();

prepared statements 的美妙之处在于您不需要对变量进行转义,并且如果您运行更多次它也会更有效。

【讨论】:

    【解决方案2】:
    $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();
    

    【讨论】:

      【解决方案3】:

      有两种方式:

      $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。第一个更灵活。

      【讨论】:

      • 谢谢,我刚想问你的第一种方法,但你已经在这里发布了。我唯一的区别是 $res->bindParam(':file_code', $file_code, PDO::PARAM_INT);这部分 PDO::PARAM_INT
      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 2019-06-28
      • 2018-07-07
      • 2017-01-20
      • 2022-11-13
      • 2014-08-03
      • 2012-12-11
      • 1970-01-01
      相关资源
      最近更新 更多