2013-03-09 75 views
4

在开发过程中,我设置了error_reporting(-1);,所以我确信每个语法错误都会由PHP显示。这是,例如PDO bindParam是否允许不存在的变量?

echo $ttt; 
当然

它给

Notice: Undefined variable: ttt in ... 

在这片码(表示在MySQL表中的行的一些类的一部分):

public function delete(){ 
// ... 
    $sth=$dbh->prepare('DELETE FROM tobjects WHERE IdObject=:id'); 
    $sth->bindParam(':id',$this->fid,PDO::PARAM_INT); 
    $sth->execute(); 

我错误地输入了现在的$this->fid,并且没有发生删除,甚至没有发现错误,我花了很长时间找到它。

$dbh设置别处:

$dbh=new PDO("mysql:host=XXXX;port=XXXX;dbname=XXXX",$db_user, 
$db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

难道我做错了什么或怎么可能这是给没有错误?

+0

*“我是否做错了什么?”*,以及您将错误模式设置为异常,但不使用任何try/catch块来捕获这些异常... – 2013-03-09 22:21:06

+0

这不是PDO,应该给出关于这个的错误。正如在你的回声声明中,应该报告它是php。 – 2013-03-09 22:21:54

+0

是的,但为什么PHP不显示通知:未定义的变量? – Voitcus 2013-03-09 22:23:37

回答

4

您看不到通知,因为参数bindParam的参数被传递。

function test(&$var) { 
    // var may also be undefined 
    var_dump($var); 
} 

test($undef); 

这不会引发任何错误。 Doc:What References Do

+0

谢谢你的帮助。 – Voitcus 2013-03-09 22:28:16