【发布时间】:2013-09-09 20:47:30
【问题描述】:
我正在转换为 PDO 并使用准备好的语句,我想将我的结果绑定为 $stmt->bind_result($email_count); 所以我可以将其放入 if 语句中以查看电子邮件是否存在但是我得到了与前面的示例相关的错误Fatal error: Call to undefined method PDOStatement::bind_result() in /Applications/XAMPP/xamppfiles/htdocs/imanage/insert.php on line 51。
我猜 bind_result 不是 PDO 定义的方法,那么我可以使用等效的方法吗?
我的代码如下以防万一:
插入.php
<?php
include("connect/class.Database.php");
class Users extends Database {
public function insert() {
$stmt = $this->pdo->prepare("SELECT COUNT(*) FROM users WHERE email=:email");
$stmt->bindParam(":email", $_POST['email']);
$stmt->bind_result($email_count);
$stmt->execute();
$stmt->fetch(PDO::FETCH_ASSOC);
if ($email_count > 0) {
echo "email exisits! click here to try <a href='register'>again</a>";
} else {
//escape the POST data for added protection
$username = isset($_POST['username']) ? $_POST['username'] : null;
$cryptedPassword = crypt($_POST['password']);
$password = $cryptedPassword;
$name = isset($_POST['name']) ? $_POST['name'] : null;
$email = isset($_POST['email']) ? $_POST['email'] : null;
$data = array($username, $password, $name, $email);
$stmta = $this->pdo->prepare("INSERT INTO users (username, password, name, email) VALUES (?, ?, ?, ?)");
$stmta->execute($data);
printf("%d Row inserted.\n", $stmta->row_count);
/* close statement and connection */
$stmta->close();
} // end email_count and insert to table
} // end function
}
?>
连接/class.Database.php
<?php
// Database connection PDO
class Database {
public function __construct() {
// Connection information
$host = 'localhost';
$dbname = 'imanage';
$user = 'root';
$pass = '';
// Attempt DB connection
try
{
$this->pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Successfully connected to the database!';
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
public function __destruct()
{
// Disconnect from DB
$this->pdo = null;
echo 'Successfully disconnected from the database!';
}
}
?>
【问题讨论】:
-
bind_result 看起来像一个 MySQLi 函数:php.net/manual/en/mysqli-stmt.bind-result.php 这意味着您不可能将 pdo 函数与 MySQLi 混合和匹配,反之亦然。
-
$stmt->fetch(PDO::FETCH_ASSOC)返回一个关联数组,这与 mysqli 调用中的fetch()不同,后者需要变量引用。您可以只获取由$row = $stmt->fetch(PDO::FETCH_ASSOC)之类的调用返回的数组来查看您得到了什么,print_r($row); -
这就是绑定在 PDO 中的工作方式:php.net/manual/en/pdostatement.bindparam.php(另请查看该页面上的其他绑定函数)
-
查看
PDOStatement::fetch()docs for examples...它通常比 MySQLi 更容易使用。 -
好的,谢谢,但是我如何存储电子邮件的计数?以便我可以提醒用户此电子邮件已存在? @MichaelBerkowski