Я перемещаю свое приложение из расширения 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.
Любой способ решить эту проблему.
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()
можете использовать это.
Других решений пока нет …