2009-04-07 5 views
0

Я получаю эту ошибку, когда Im пытается обновить данные в базе данных. это мой database.php файлОшибка 'localhost' 'ODBC' при обновлении

<?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 

ответ

1

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

Try:

$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

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

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>'; 
Смежные вопросы