我将应用程序从Mysql扩展名移到PHP PDO。
我面临一个奇怪的问题。
在我的开发环境中,数据库服务器[MySQL]和Web服务器都位于单个系统中,而在测试环境中,Web服务器和db服务器位于不同系统中。

以下测试代码可在开发环境中完美运行,而在测试环境中将失败。

    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'];

    }


在开发中,mysql_real_escape_string应该失败,因为没有mysql_connect()。

但是,当有本地运行的mysql服务器时,mysql_real_escape_string起作用。为了在开发环境中进行测试,我停止了本地mysql并连接到远程数据库。然后我得到以下错误:

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


因此,使用我现有的开发设置(同时包括Web和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()可以使用它。

关于php - mysql_real_escape_string没有显示错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26139514/

10-16 18:57