将Array传递给execute()函数,PHP PDO

时间:2014-05-26 09:58:26

标签: php pdo prepare

我正在尝试学习PHP PDO。我刚刚创建了一个将一些数据插入数据库的函数。但它给了我一些错误,无法插入数据。

这是我在action.php页面中的代码

$query = "INSERT INTO `details` (`name`, `email`, `pass`) VALUES(?,?, ?)";
$params = array($name, $email, $pass);
$result = $connect -> query($query, $params);

这是config.php中的代码

public function query($query, $params){
    $stmt = self::$db->prepare($query);
    $this -> result = $stmt -> execute($params);
    self::$db = NULL;
    return $this -> result;
}

这会返回错误

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: mode must be an integer' in E:\wamp\www\test\pdo_test\action.php on line 14

我只是这个领域的初学者。另一个代码适用于我并插入数据。这是

action.php的

$query = "INSERT INTO `details` (`name`, `email`, `pass`) VALUES('$name', '$email', '$pass')";
$result = $connect ->query($query);

的config.php

public function query($query){
$this->result = self::$db->query($query);
self::$db = NULL;
return $this -> result;
}

我正在尝试使用prepare()execute()进行转换。有人请帮忙。提前致谢

1 个答案:

答案 0 :(得分:0)

我建议你采用这种方法,https://github.com/colshrapnel/thebestpdowrapper 我写的是你的确切案例。

  • 感谢执行返回self,它将使您的query()函数不必要
  • 多亏了单例实现,它可以避免许多连接错误,例如self::$db = NULL;

虽然您的代码将保持清晰简洁:

$query = "INSERT INTO `details` (`name`, `email`, `pass`) VALUES(?,?, ?)";
$params = array($name, $email, $pass);
$result = DB::prepare($query)->execute($params);

至于您在问题中的特定问题,很可能$ connection包含PDO实例而不是您自己的类实例,该错误消息明确暗示。