我正在将我的应用程序从Mysql扩展移动到PHP PDO。 我正面临一个奇怪的问题。 在我的开发环境中,我有db服务器[MySQL]和web服务器都在单个系统中,在测试环境中web和db服务器在不同的系统中。mysql_real_escape_string没有显示错误
以下测试代码在开发环境中完美运行,并在测试环境中失败。
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和数据库服务器一起]
所以,我无法看到的PDO相关的错误。
任何方式来解决这个问题。
看到[mysql_real_escape_string文档](http://php.net/manual/en/function.mysql-real-escape-string.php)中的红色矩形?请按照警告并使用[mysqli_real_escape_string()](http://php.net/manual/en/mysqli.real-escape-string.php)或[PDO escaping - quote()](http:// php .net/manual/en/pdo.quote.php): – Kleskowy 2014-10-01 10:47:54
为什么你需要转义表名?它(或者它会)来自用户输入吗? – HeatherEMSL 2014-10-01 10:56:27
不是一个直接的答案,但是当您使用准备好的语句时,您不需要手动清理这些数据 - 这是使用较新的数据库功能的主要原因之一 – Steve 2014-10-01 11:05:54