PHP PDO撇号和引号转义

时间:2012-09-14 14:27:07

标签: php pdo escaping apostrophe

我有一个用户发布自己的表格。我已经阅读过PDO你没有得到撇号或quatation标记的任何问题,但是我得"\" exc。你可以猜到。

还尝试阅读http://www.php.net/manual/en/pdo.prepared-statements.php,但网站的这部分内容无法正常工作,因为我知道这就是我先问这里的原因。

我得到这样的用户输入:

if(isset($_POST["doit"])) {
    $about = cleanInput($_POST["about"]);
    $name = cleanInput($_POST["name"]);

    if(!empty($about) && !empty($name)){
     try{
     $cu_query = "INSERT INTO `members` (`about`, `name`) VALUES (:about, :name)";
     $cu_query_do = $db->prepare($cu_query);
     $cu_query_do -> bindParam(':about', $about, PDO::PARAM_STR);
     $cu_query_do -> bindParam(':name', $name, PDO::PARAM_STR);
     $cu_query_do->execute() or die(print_r($cu_query_do->errorInfo(), true));
   }

     catch(PDOException $e) {
     $log->logError($e." - ".basename(__FILE__));
   }

   }
}

我打印出这样的用户输入,然后从db中获取用户输入:

    //if isset get exc..

    try {
 $mq = "SELECT * FROM `members` WHERE `m_id` = :m_id";
 $mq_check = $db->prepare($mq);
 $mq_check->bindParam(':m_id', $m_id, PDO::PARAM_INT);
 $mq_check->execute();
 $ac = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
 }
     catch(PDOException $e) {
 $log->logError($e." - ".basename(__FILE__));
                }


     if(!empty($ac)) {
     $_loader = true;
     $fetch = $mq_check->fetch (PDO::FETCH_ASSOC);
     $name = cleanInput($fetch['name']);
     $about = cleanInput($fetch['about']);


     }

     echo $name;

谢谢

答案:如果您已从WHM或php.ini中禁用它,但如果问题仍然存在,请查看下面提到的代码@Wayne Whitty 如果它似乎仍然活跃,

在头文件中包含此代码:

if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
    foreach ($val as $k => $v) {
        unset($process[$key][$k]);
        if (is_array($v)) {
            $process[$key][stripslashes($k)] = $v;
            $process[] = &$process[$key][stripslashes($k)];
        } else {
            $process[$key][stripslashes($k)] = stripslashes($v);
        }
    }
}
unset($process);
}

这解决了我的问题,但如果问题仍然存在,那么你必须检查你的输入清理。

2 个答案:

答案 0 :(得分:1)

您的服务器上启用了魔术引号,或者您的函数cleanInput()正在调用函数addslashes()。

运行此命令检查是否启用了魔术引号:

if(get_magic_quotes_gpc()){
    echo 'Magic Quotes enabled... sigh!';
}

PHP manual向您展示如何处理魔术引号:

答案 1 :(得分:0)

问题肯定是由于我的cleanInput方法,我认为它是在预先转义帖子值。