- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在制作一个 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/
我正在尝试设置我最近在服务器上完成的 codeigniter 网络应用程序。我在自己的电脑上本地写的。但是,当我尝试登录时,出现了这两个错误。 A PHP Error was encountered
在我的本地 MAMP 设置中使用 mysql_real_escape_string 时它工作正常。例如,当我在文本字段中输入“test”时,它显示为“test”。 当我将它发布到远程服务器时,它似乎并
是否应该将 mysql_real_escape 转义变量用于对数据库的所有查询? 最佳答案 是的,始终转义您传递给查询的变量。 更好的是,使用 PDO : prepare('SELECT name,
我正在使用 mysql_real_escape_string 函数来转义文本中的特殊字符,以将数据插入数据库。如果我使用变量,它将不起作用。 echo $ab=$_POST['textarea'];
我遇到了这个奇怪但烦人的浏览器语法问题。通过以下方式编码,我丢失了特殊字符后的所有字符串:" echo ''; echo ''; echo ''; echo ''; 如
也许我太笨了,没法再搜索。 无论如何,情况是这样的。 为了防止 SQL 注入(inject),我需要使用 mysql_real_escape_string,但是这个函数非常笨重并且需要“很多”额外代码
我一直在制作一个 php 网站,在我的本地机器上开发。对此真的很陌生,所以这是我尝试过的第一件事。当我移动到我的主机时,出现以下错误: Warning: mysql_real_escape_stri
我不得不说,在我身上经常发生这样的情况:例如,在 php 中使用它们处理 html 参数(get、post)并将它们发送到 mysql 时,我往往会错过或使用错误的字符串转义。 我很确定这种情况不仅发
这可能是一个非常愚蠢和 self 回答的问题:我正在像这样剥离我的提交(但需要提交到我的表并将数据回显到屏幕): $num_of_badges = stripslashes(trim(mysql_re
我是一名优秀的程序员,十分优秀!