gpt4 book ai didi

php - fetch_array 到 PDO

转载 作者:行者123 更新时间:2023-11-29 04:18:14 25 4
gpt4 key购买 nike

我对 PDO 还是个新手。需要知道将此 mysqli 代码替换为 PDO。

public function validusername() {
$conn = new mysqli('127.0.0.1', 'root', '', 'project');
$sql = "SELECT COUNT(*) FROM `users` WHERE `username` = '$this->username'";
$result = $conn->query($sql);

return ($result->fetch_array()[0] == 1) ? true : false;
}

注意:$this->username 是来自 public function ___contruct 中的 $_POST['username'] 的值单类。此 mysqli 将检查用户名是否存在于 MySQL 中,如果存在则返回 true。

我试着用这些替换代码:

public function validusername() {
$db = new PDO('mysql:host=127.0.0.1;dbname=project', 'root', '');

$result = $db->prepare('
SELECT COUNT(*)
FROM users
WHERE username = :username
');
$result->execute(['username'=>$this->username]);
$result = $result->fetch(PDO::FETCH_ASSOC);

return ($result[0] == 1) ? true : false;
}

最佳答案

主要变化是:

  1. 在使用 PDO 时使用 DSN - DSN 将包括数据库、主机名或端口(可选)

  2. 您在连接对象的实例上定义获取模式。

  3. 您可以轻松地将您的值绑定(bind)到查询以防止 SQL 注入(inject)

  4. 您使用 prepare 方法创建一个语句,然后对该语句返回的变量调用 execute。

您的代码已更新以反射(reflect)上述内容:

public function validusername() {
$conn = new PDO('mysql:dbname=project;host=127.0.0.1', 'root', '');
// return all result sets as associative array
$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$sql = "SELECT COUNT(`uid`) AS total FROM `users` WHERE `username` = :username";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $this->username);
$stmt->execute();
$row = $stmt->fetch();
return $row['total']==1;
}

绑定(bind)变量的快速方法是这样做:

$stmt->execute([':username'=>$this->username]);

而不是这个:

$stmt->bindParam(':username', $this->username);
$stmt->execute();

使用 bindParam 您可以设置第三个参数的参数类型(例如 int 或 boolean)。

这是 PDO 语句对象的文档,它提供了一些执行查询的其他示例:http://php.net/manual/en/pdo.prepared-statements.php

关于php - fetch_array 到 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34651201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com