gpt4 book ai didi

php - 何时使用 PDO 准备查询。 mysql_real_escape 错误

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

我一直在制作一个 php 网站,在我的本地机器上开发。对此真的很陌生,所以这是我尝试过的第一件事。当我移动到我的主机时,出现以下错误:

 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied             for user 'matthew'@'localhost' (using password: NO)  on line 11

我在这里搜索了很多,我很确定它是因为我需要“准备”我的查询。我不确定什么时候准备正确,什么时候不正确。我在下面添加了一些查询以详细解释:

连接到数据库:

$hostname = "localhost";
$username = "root";
$password = "root";

try {
$dbh = new PDO("mysql:host=$hostname;dbname=wmpt", $username, $password);
//echo "Connected to database"; // check for connection
}
catch(PDOException $e)
{
echo $e->getMessage();
}

这是一个示例查询:

$username = mysql_real_escape_string($_POST['run']);


$STH = $dbh->query("SELECT * FROM tblusers WHERE username = '$username' ");
$STH->setFetchMode(PDO::FETCH_ASSOC);
$result = $STH->fetch();

我的问题是,如果我使用用户提交的数据查询/插入/更新数据库,是否只需要“准备”一个查询?

上面的查询是不好的做法吗?如果它不包含用户提交的数据怎么办,即我想查询

 $STH = $dbh->query("SELECT * FROM tblusers WHERE username LIKE '%hotmail%' ");

这可能是一个不好的例子,但我正在说明开发人员定义的查询。

这是我得到的原因吗,我该如何避免:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for     user 'matthew'@'localhost' (using password: NO)  on line 11

最佳答案

要解决您收到的错误,mysql_real_escape_string()需要通过 mysql_connect() 打开连接。因为您没有,它尝试连接并失败(使用用户名 matthew,而您的 PDO 正在连接 root)。此外,您不能(或者,不应该)混合和匹配 mysql_real_escape_string()PDO - 它们是不同的库。

关于“何时”使用准备好的语句,一般的经验法则是值未硬编码时。您的 LIKE '%hotmail%' 示例不需要准备,它是硬编码的并且永远不会更改(当然,除非您手动更新它)。

如果您有一个查询将接收任何类型的变量,无论是来自 $_POST$_GET 的数据,还是开发人员创建的变量在查询前 10 行,您应该使用准备好的语句(或者至少转义它,查看 PDO::quote )。

关于php - 何时使用 PDO 准备查询。 mysql_real_escape 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037853/

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