使用sql搜索字母和更新数据

下一个代码是从数据表中所有行的“note”列中查找字符串中的字符。一旦它获得行“id”,那么它应该在同一行中将“did_read”列更新为值“1”。但没有成功。我必须做哪些更正才能使其正常工作?


<?php 


    if (isset($_POST['str'])){ 


       $strid =$_POST['str'];

       $sql="SELECT id FROM notifications WHERE note CONTEINS='$strid'  ";

       $query = mysqli_query($db_conx, $sql);

       $statusnumrows = mysqli_num_rows($query);

       if($statusnumrows> 0){

       while ( $row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {

       $statusid = $row["id"];

       $sql = "UPDATE notifications SET did_read='1' WHERE id='$statusid'";

       $query = mysqli_query($db_conx, $sql);

       echo 'did_read_ok';

       exit;

        }

    }


}

?>

现在看,我认为接下来我应该更容易使用。但也无法正常工作。


<?php 


if (isset($_POST['str'])){ 


  $strid= mysqli_real_escape_string($db_conx, $_POST['str']);


   $sql = "UPDATE notifications SET did_read='1' WHERE note LIKE='$strid' ";

   $query= mysqli_query($db_conx, $sql);

   echo 'did_read_ok';

   exit;




}

?>

在您的帮助下,我在评论中得出了一些结论。如果我取消注释,代码的第一部分就可以工作。但是我不明白为什么条件循环中的其他代码在我得到 "string(10)'status_218'" 和 "did_read_ok" 时不起作用?我正在使用 ajax.send() 发送“str”变量。


<?php

     //$strid= 'status_218';

     //  $sql = "UPDATE notifications SET did_read='1' WHERE note LIKE '%$strid%'";// not working:LIKE CONCAT('%', $strid, '%')

     //  $query= mysqli_query($db_conx, $sql);


if (isset($_POST['str'])){ 

   $strid= $_POST['str'];

   var_dump($strid);//I get: string(10)status_218

   $sql = "UPDATE notifications SET did_read='1' WHERE note LIKE='%$strid%'";

   $query= mysqli_query($db_conx, $sql);

   echo 'did_read_ok';

   exit;

}

?> 


心有法竹
浏览 173回答 1
1回答

倚天杖

我不应该回答这个问题,但我想帮助你。首先,如果您尚未启用错误报告,则必须启用。阅读如何在 MySQLi 中获取错误消息?.&nbsp;我还建议切换到 PDO 而不是 mysqli,因为它更好更简单。你的 PHP 和 SQL 有问题。您似乎没有在任何地方连接到数据库。您的代码没有使用准备好的语句,这使得它容易受到 SQL 注入的影响。你可以exit从你的代码中删除,它不会做任何事情的语法LIKE是LIKE '%string%',没有=一个很好的 mysqli 代码示例应该如下所示。<?php// report all errors. Check the error log or enable display errors in PHP configerror_reporting(E_ALL);// Always enable mysqli error reportingmysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);$db_conx = new mysqli('localhost', 'username', 'password', 'databaseName');$db_conx->set_charset('utf8mb4'); // always set the charsetif (isset($_POST['str'])) {&nbsp; &nbsp; $strid = '%'. $_POST['str'] .'%';&nbsp; &nbsp; // prepare -> bind -> execute&nbsp; &nbsp; $stmt = $db_conx->prepare("UPDATE notifications SET did_read=1 WHERE note LIKE ?");&nbsp; &nbsp; $stmt->bind_param('s', $strid);&nbsp; &nbsp; $stmt->execute();&nbsp; &nbsp; echo 'did_read_ok';}
打开App,查看更多内容
随时随地看视频慕课网APP