旧版本和新版本PHP上的神奇引号
这段代码应该确保干净的代码到达数据库 它应该在PHP的早期版本(早于4.3.0)和PHP的更高版本(早于4.3.0)中工作 它工作得很好,因为数据进入数据库时没有问题,但我在浏览器上遇到了一个错误旧版本和新版本PHP上的神奇引号,php,magic-quotes,Php,Magic Quotes,这段代码应该确保干净的代码到达数据库 它应该在PHP的早期版本(早于4.3.0)和PHP的更高版本(早于4.3.0)中工作 它工作得很好,因为数据进入数据库时没有问题,但我在浏览器上遇到了一个错误 $menu_name = mysql_prep($_POST['menu_name']); 这是我如何调用mysql_prep函数的 function mysql_prep($value) { $get_magic_quotes = get_magic_quotes_gpc();
$menu_name = mysql_prep($_POST['menu_name']);
这是我如何调用mysql_prep函数的
function mysql_prep($value)
{
$get_magic_quotes = get_magic_quotes_gpc();
$new_enough_php = function_exists ("mysql_real_escape_string"); //check if php version is greater than 4.3.0
if($new_enough_php) // if php is of a newer version
{
//undo magic quotes effect so that mysql_real_escape_string can work well
if ($get_magic_quotes)
{
$value = stripslashes ($value);
}
$value = mysql_real_escape_string($value);
}
else //mysql is older than 4.3.0
{
//add slashes manually if magic quotes are off
if(!$get_magic_quotes)
{
$value = addslashes ($value);
}
//if magic quotes already exist, slashes already exists
}
return $value;
//$value = mysql_real_escape_string($value);
//$value_without_slashes = stripslashes ($value);
//return $value_without_slashes;
}
对于初学者来说,该函数可以缩短到大约5行(也更容易阅读) 其次,当您调用该函数时,是否连接到MySQL?您必须连接PHP才能知道如何/如何转义。手册中并没有100%明确说明,但暗示: 如果未指定链接标识符,则假定由
mysql\u connect()
打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个链接,就像调用了没有参数的mysql\u connect()
一样
如果这仍然不能解决问题,我建议在执行查询之前打印查询,并检查是否一切正常。您不应该在DB方法中这样做,如果您运行的是PHP 5.3+,则可以将此代码放在页面的最顶部:
if (get_magic_quotes_gpc() === 1)
{
$_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
$_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
$_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
$_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}
它处理键、值和多维数组中的魔引号。是的,需要更多的错误信息。这是一个mysql错误,无法执行查询,它显示错误出现在之前;哪种是MYSQL语句您可以发布发送到MYSQL服务器执行的查询吗?i、 e.最终传递给mysql\u查询的是什么