Я перемещаю свое приложение с расширения Mysql на PHP PDO. У меня возникла странная проблема. В моей среде разработки у меня есть как сервер db [MySQL], так и веб-сервер в единой системе, где, как и в тестовой среде, веб-серверы и серверы db находятся в разных системах.
Следующий тестовый код отлично работает в среде dev и не работает в тестовой среде.
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 работает локально. Чтобы проверить это в среде dev, я остановил локальную mysql и подключился к удаленной базе данных. Затем я получил следующую ошибку:
Warning: mysql_real_escape_string(): A link to the server could not be established
Таким образом, с моей существующей настройкой разработки (как с сервером, так и с сервером db), я не вижу ошибок, связанных с PDO.
Любой способ решить эту проблему.
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()
может использовать его.