更新时出现'ODBC'@'localhost'错误

时间:2009-04-07 10:07:26

标签: mysql

我在尝试更新数据库中的数据时遇到此错误。 这是我的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

3 个答案:

答案 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>';