Ошибка 'ODBC' @ 'localhost' при обновлении - PullRequest
0 голосов
/ 07 апреля 2009

Я получаю эту ошибку, когда пытаюсь обновить данные в базе данных. это мой файл 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 ]

1 голос
/ 07 апреля 2009

Вы смешиваете процедурные и объектно-ориентированные вызовы стиля.

Попытка:

$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

0 голосов
/ 07 апреля 2009

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>';
0 голосов
/ 07 апреля 2009

В вашем mysql connect () кажется, что вашей комбинации имени пользователя и пароля запрещен доступ к mysql, вы можете проверить свои данные и попробовать еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...