【问题标题】:Text to be stored in database ends before apostrophpe要存储在数据库中的文本在撇号之前结束
【发布时间】:2016-04-13 23:11:09
【问题描述】:

我有一个存储过程要存储在数据库中。如下所示:

USE `login`;
DROP procedure IF EXISTS `post_and_fetch_ans`;

DELIMITER $$
USE `login`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `post_and_fetch_ans`(IN answerbody LONGTEXT,IN postid int,IN answerer int)
BEGIN
   INSERT INTO `login`.`answers` (answer_body,userpost_post_id,users_user_id) VALUES (answerbody,postid,answerer) ;
   SELECT * FROM `login`.`answers` WHERE userpost_post_id = postid  ORDER BY answer_date DESC LIMIT 1;
END$$

DELIMITER ;

为了将文本存储在数据库中,我必须在 PDO 准备语句中存储过程以将值绑定到查询字符串。

$result=$db->post_and_fetch("CALL login.post_and_fetch_ans(?,?,?)",array($answer,$post_id,$answerer))->result();

并使用 bindValue 方法绑定参数:

public function post_and_fetch($sql,$params=array()){
            $this->_error=false;

             if($conn=$this->_pdo->prepare($sql)){
             $x=1;
                if(count($params)){
                  foreach($params as $param){

                      $conn->bindValue($x,$param);
                      $x++;

                  }

              }
              if($conn->execute()){

                  $this->_results=$conn->fetchAll(PDO::FETCH_OBJ);

                  $this->_count=$conn->rowCount();
                  return $this;

               }else{

                 $this->_error=true;

              }

         }
        }

但是当我尝试保存像

这样的字符串时

这是一个'测试

只有

这是一个

存储在数据库中。如何在将文本存储到数据库之前转义该文本的撇号形式。任何帮助都会得到帮助?

【问题讨论】:

标签: javascript php mysql stored-procedures pdo


【解决方案1】:

您可以在传递给函数之前对值使用 mysql_real_escape_string

 $str = "Zak's and Derick's Laptop";
 $str_with_escape = mysql_real_escape_string($str);

那么对于解码,您必须替换以下字符的前置反斜杠:\x00、\n、\r、\、'、" 和 \x1a。

【讨论】:

  • mysql_real_escape_string 自 php 7.0 起已弃用。此外我也没有使用 mysqli...我正在使用 PDO 来完成工作..如果我将数据库从 mysql 更改为其他内容会发生什么?
  • 如果您不想要一个面向 mysql 的解决方案,您必须定义一个正确的字符串操作,避免使用特定的 db 相关函数.. 进行编码和解码(一对存储过程可能是正确的解决方案) 环顾四周,我一般找不到 pdo 的任何通用解决方案..
猜你喜欢
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2016-03-21
  • 2019-05-19
  • 2011-08-08
  • 1970-01-01
相关资源
最近更新 更多