我将应用程序从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/