Php 拒绝用户访问';根'@';本地主机';(使用密码:否)
我正在使用一个简单的表单进行数据库查询。数据库是通过密码访问的,我在代码中包含了密码。我不知道为什么我总是在字符串转义和未定义变量$query=htmlspecialchars($query)上出错Php 拒绝用户访问';根'@';本地主机';(使用密码:否),php,mysql,Php,Mysql,我正在使用一个简单的表单进行数据库查询。数据库是通过密码访问的,我在代码中包含了密码。我不知道为什么我总是在字符串转义和未定义变量$query=htmlspecialchars($query)上出错 搜寻 这里的问题是,您已经使用凭据调用了mysqli对象,但是,稍后您尝试使用mysql\uquot/code>过程方法执行。你在那里没有联系。您需要坚持使用mysqli对象。此外,您应该使用准备好的语句来处理用户对SQL查询的输入 除去这些,我们不需要对准备好的语句进行消毒: //BYE! $q
搜寻
这里的问题是,您已经使用凭据调用了mysqli
对象,但是,稍后您尝试使用mysql\uquot/code>过程方法执行。你在那里没有联系。您需要坚持使用mysqli
对象。此外,您应该使用准备好的语句来处理用户对SQL查询的输入
除去这些,我们不需要对准备好的语句进行消毒:
//BYE!
$query = htmlspecialchars($query);
// changes characters used in html to their equivalents, for example: < to >
$query = mysql_real_escape_string($query);
// makes sure nobody uses SQL injection
现在我们可以将参数绑定到$stmt
对象
$stmt->bind_param('ss', $query, $query);
让我们现在就执行它,并取回我们的数据
$result = $stmt->execute();
然后我们可以循环:
while ($row = $result->fetch_assoc()) {
echo "<p><h3>".$result['LastName']."</h3>".$result['FirstName']."</p>";
}
while($row=$result->fetch_assoc()){
echo“”$result['LastName']”..$result['FirstName']”.“”;
}
编辑
您也不需要用反勾号转义列名,因为:
- 它们的名称中没有
-
- 它们不是MySQL中保留的特殊单词
确保您的PHP版本低于7.0,如下所述:
警告
该扩展在PHP5.5.0中被弃用,在PHP7.0.0中被删除。相反,应该使用MySQLi或PDO_MySQL扩展。有关更多信息,请参见MySQL:选择API指南和相关常见问题解答。此功能的替代方案包括:
mysqli_real_escape_string()
PDO::quote()您缩进了代码,但没有在if语句后面加一个{{需要在if语句中包含多行代码。您正在混合使用mysql.*
和mysqli.*
函数。这不起作用。我想我明白您的意思了。我尝试过运行它,但出现语法错误,这里出现意外的t_字符串-$stmt->bind_参数('ss',$query,$query query);@Tony请再次检查,在我匆忙的回答中,我省略了$stmt=$mysqli->prepare上的);
(
line。我很抱歉。我看着它,看到了它,以为你知道一些关于结构的东西,但我没有看到,所以我忽略了它。我做了更改,但仍然在另一行上得到语法错误语法错误,这里是意外的t_字符串-$stmt->bind_参数('ss',$query,$query);ss从哪里来?@Tony Okay….在准备好的语句中有另一个语法错误,因为它以,
开头,然后是"
。我已经解决了这个问题。'ss'
是一个类型标识符
。's'
在本例中代表字符串
,它让bind param函数知道我们要传入的两个变量应该被视为字符串。我在select语句中看到了这一点,但认为它是关闭的。我不知道这一点关于标识符。我只使用MySQL和PHP几个月,它带我去学校了。哈哈。现在它不喜欢执行行上的=了。
$result = $stmt->execute();
while ($row = $result->fetch_assoc()) {
echo "<p><h3>".$result['LastName']."</h3>".$result['FirstName']."</p>";
}