【问题标题】:PHP MYSQLI Database query not returning string after an apostrophePHP MYSQLI数据库查询在撇号后不返回字符串
【发布时间】:2018-07-20 05:57:55
【问题描述】:

我有一个 PHP 搜索函数,它在撇号后不返回字符串字符,例如。 (Golden State's Garden) 将回归 (Golden State)。我正在使用的代码如下。我正在寻找答案,但似乎大多数回复都评论了转义字符串。我已经在数据库中有信息,并试图用查询来检索它,代码是

if (isset($_POST["search_submit"]))  {

    if(empty(trim($_POST["search"]))){
        echo 'Please search for an item';
    } else{
        $find = "%".(trim($_POST["search"]))."%";
        $sql = ("SELECT * FROM combine WHERE a_product 
                    LIKE ? OR b_product LIKE ? ");
        $stmt = mysqli_stmt_init($conn);
        if(!mysqli_stmt_prepare($stmt, $sql)){
           echo "connection failed, try again later";
        }else{
            mysqli_stmt_bind_param($stmt, "ss", $find, 
                $find);
            mysqli_stmt_execute($stmt);


if(!empty($_SESSION['basket'])){ 
        foreach($_SESSION['basket'] as $key => $value){ 
    <tr>  
       <td><?php echo $value["name"]; ?></td>  

【问题讨论】:

  • 代码看起来不错,你能显示代码来演示字符串被截断的位置吗?它只是显示不正确(尝试print_r()从数据库中检索的行)
  • 当整个字符串应该是“football's and baskekball's”时,var_dump 会显示 string(8)“football”。所有其他不包含撇号的字符串都将完整返回
  • 我有一个 foreach 循环作为 $key=>$value 并回显一个结果。唯一受影响的结果是包含撇号的结果
  • 你能添加那个循环的代码吗?

标签: php database mysqli prepared-statement


【解决方案1】:

你可以使用:

$find="%".mysqli_real_escape_string($_POST['search'])."%";

它会得到你想要的完整字符串结果。

【讨论】:

  • 有一个错误,说mysqli_real_escape_string需要2个参数,只给了1个。当我尝试将 $conn 添加到代码时,它会回显连接失败
  • $find = mysqli_real_escape_string($con, $_POST['search']);
  • 然后就可以使用$find="%".$find."%";
  • 你可以正确检查你的连接变量 $con=mysqli_connect("localhost","your_mysqluser","yourmysql_psw","your mysql_db"); // 检查连接 if (mysqli_connect_errno()) { echo "Failed to connect to MySQL:" . mysqli_connect_error(); }
  • 您的代码有效,谢谢。但我认为导致问题的原因是在初始搜索字符串完整出现之后我有另一个代码收集该信息并将其放入另一个字段中我有这个 sn-p, if(filter_input(INPUT_POST, 'id ')){ if(isset($_SESSION['basket'])), 我认为这是字符串损坏的地方,也许是 filter_input 损坏了字符串
猜你喜欢
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2017-05-07
相关资源
最近更新 更多