我在尝试更新数据库中的数据时遇到此错误。 这是我的database.php文件
<?php
$db_name = "db";
$db_server = "localhost";
$db_user = "xxxx";
$db_pass = "zzzzzzzzz";
$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name)
or die(mysqli_error());
?>
update.php
<?php
require 'database.php';
$title = mysql_real_escape_string($_POST['title']);
$id = mysql_real_escape_string($_POST['id']);
$update_query = "UPDATE photos SET title = '$title' WHERE id='$id'";
$result = $mysqli->query($update_query) or die(mysqli_error($mysqli));
if ($result) {
echo "Success!";
echo "The title of this photo has been changed to: <strong>$title</strong>";
}
?>
错误消息:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\myPhotosWebsite\changePhotoTitle.php on line 5
答案 0 :(得分:1)
您正在混合过程式和面向对象的样式调用。
尝试:
$title = $mysqli->escape_string(_POST['title']); /* Call as a method */
而不是:
$title = mysql_real_escape_string($_POST['title']);
real_escape_string
需要有效的连接句柄,因为它需要知道连接字符集。
如果将其称为过程,则应将连接句柄作为第一个参数传递:
mysql_real_escape_string($connection_handle, $string_to_escape)
或者只是将其称为上述方法。
有关详细信息,请参阅mysqli_real_escape_string
答案 1 :(得分:0)
在你的mysql connect()中,似乎你的用户名/密码组合被拒绝访问mysql,你可能想查看你的详细信息并重试。
答案 2 :(得分:0)
mysql_real_escape_string需要数据库连接才能运行。除非您明确传递一个,否则这意味着您必须先调用mysql_connect()
。但是您正在使用MySQLi()
对象来获取连接。我认为使用MySQLi()
不会设置默认连接mysql_
系列函数。当然,
(using password: NO)
暗示它没有获得$ db_pass。
最好坚持使用'mysql'或'mysqli',而不是试图混合两者。如果您正在使用MySQLi,您可能希望利用参数化语句来避免必须明确调用$mysqli->escape_string()
。
PS。
echo "The title of this photo has been changed to: <strong>$title</strong>";
$ title是SQL转义的,但不是HTML转义的。它会有不必要的反斜杠,同时不会阻止HTML注入(XSS攻击)。代替:
echo 'The title of this photo has been changed to: <strong>'.htmlspecialchars($_POST['title']).'</strong>';