Php 拒绝用户访问';根'@';本地主机';(使用密码:否)

Php 拒绝用户访问';根'@';本地主机';(使用密码:否),php,mysql,Php,Mysql,我正在使用一个简单的表单进行数据库查询。数据库是通过密码访问的,我在代码中包含了密码。我不知道为什么我总是在字符串转义和未定义变量$query=htmlspecialchars($query)上出错 搜寻 这里的问题是,您已经使用凭据调用了mysqli对象,但是,稍后您尝试使用mysql\uquot/code>过程方法执行。你在那里没有联系。您需要坚持使用mysqli对象。此外,您应该使用准备好的语句来处理用户对SQL查询的输入 除去这些,我们不需要对准备好的语句进行消毒: //BYE! $q

我正在使用一个简单的表单进行数据库查询。数据库是通过密码访问的,我在代码中包含了密码。我不知道为什么我总是在字符串转义和未定义变量$query=htmlspecialchars($query)上出错


搜寻

这里的问题是,您已经使用凭据调用了
mysqli
对象,但是,稍后您尝试使用
mysql\uquot/code>过程方法执行。你在那里没有联系。您需要坚持使用
mysqli
对象。此外,您应该使用准备好的语句来处理用户对SQL查询的输入

除去这些,我们不需要对准备好的语句进行消毒:

//BYE!
$query = htmlspecialchars($query); 
    // changes characters used in html to their equivalents, for example: < to &gt;

$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>";
}