【问题标题】:PHP and PDO issues [closed]PHP 和 PDO 问题 [关闭]
【发布时间】:2011-06-09 16:50:42
【问题描述】:

所以我是 PDO 的初学者,但我在做一些看似简单的事情时遇到了麻烦。我无法让我的表格更新,它不会给我任何错误。看看:

<?php

  $host   = 'localhost';
  $dbname = 'postGal';
  $user   = 'user';
  $pass   = 'pass';

  $DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);  
  $DB->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   

  catch(PDOException $e) {  
    echo "Reported Error";  
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);  
  }

  class person {  
    public $f_name;  
    public $l_name;   

    function __construct($f,$l) {  
        $this->f_name = $f;  
        $this->l_name = $l;  
    }  
  }  

  $person = new person('John','Doe');  

  $STMT = $DB->("INSERT INTO users (f_name, l_name) value (:f_name, :l_name)");  
  $STMT->execute((array)$person); 

?>

此外,我知道该表并且一切正常,因为我可以使用 mysql 或 mysqli 执行相同的语句。谢谢!

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    您必须在 try 块中包含可能引发异常的代码块才能捕获引发的异常。

    Manual

    还必须在插入语句中说 VALUES 而不是 VALUE。

    您也完全错误地应用了准备好的语句。有关一些简单示例,请参阅手册。例如,您必须在某个时候调用准备方法,而您的数组转换很奇怪,不确定您会这样做。

    我也在这里闻到了巨魔的味道。

    【讨论】:

    【解决方案2】:

    也许catch 想成为set_error_handler$DB-&gt;("INSERT 错过了 prepare 方法。最后,我认为您不能像这样将对象转换为数组。也许您想要get_object_vars 并对其进行操作以使其成为所需的数组(以冒号开头的键),但是对象的意义何在?只需使用一个数组。

    【讨论】:

    • 我看不出有任何理由认为这是一次拖钓企图。这只是糟糕的代码。
    • 为什么投反对票?尽管我说它太坏了,但它看起来像是一次拖钓尝试,我确实修复了大部分并提供了建议。
    • 好吧,OP 可能不是巨魔,但您的答案的先前版本有点苛刻。请保持良好状态。
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2017-05-18
    相关资源
    最近更新 更多