mysql_real_escape_string не показывает ошибку

Я перемещаю свое приложение из расширения Mysql в PHP PDO.
Я сталкиваюсь со странной проблемой.
В моей среде разработки у меня есть и сервер БД [MySQL], и веб-сервер в одной системе, где, как и в среде тестирования, веб-серверы и серверы БД находятся в разных системах.

Следующий тестовый код отлично работает в среде разработки и не проходит в тестовой среде.

    require "class.DB.php" ;

class DbMaster extends DB
{
public function __construct()
{
$this->Host     = "192.168.1.00";
$this->Database = 'test_database';
$this->User     = "root";
$this->Password = "12345";
}
}

// Creates the instance
$db = new DbMaster();

$table = mysql_real_escape_string('persons');
$result_array = $db->query("SELECT Id, Age FROM $table WHERE Id >= :Id", array("Id" => 1));

foreach ($result_array as $rec)
{
echo '<br>'.$rec["Id"].' -> '.$rec['Age'];

}

В dev mysql_real_escape_string должна завершиться сбоем, потому что mysql_connect () не существует.

Но mysql_real_escape_string работает, когда сервер mysql работает локально. Чтобы проверить это в среде разработки, я остановил локальный MySQL и подключился к удаленной базе данных. Тогда я получил следующую ошибку:

Warning: mysql_real_escape_string(): A link to the server could not be established

Таким образом, с моими существующими настройками разработки [и web, и db server вместе] я не вижу ошибок, связанных с PDO.

Любой способ решить эту проблему.

0

Решение

mysql_real_escape_string() пытается открыть соединение с сервером с mysql_connect() если нет соединения Значения по умолчанию для mysql_connect() «localhost» и «root» без пароля.

Если у вас есть учетная запись root без пароля в вашей среде разработки (что является довольно распространенной настройкой), это будет работать без проблем, так как соединение может быть установлено.

С другой стороны, в реальной среде у пользователя root есть пароль, поэтому этот вызов не удастся.

В этом случае mysql_real_escape_string() вернусь false вместо вашего сбежавшего значения.

Решение: используйте mysqli или PDO-эквивалент функции. Или откройте дополнительное соединение, используя mysql_connect() с действительными учетными данными в настоящее время так mysql_real_escape_string() можете использовать это.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]