为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
心有法竹 2022-06-17 16:46:24
下一个代码是从数据表中所有行的“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;}?> 
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

我不应该回答这个问题,但我想帮助你。首先,如果您尚未启用错误报告,则必须启用。阅读如何在 MySQLi 中获取错误消息?. 我还建议切换到 PDO 而不是 mysqli,因为它更好更简单。

你的 PHP 和 SQL 有问题。

  • 您似乎没有在任何地方连接到数据库。

  • 您的代码没有使用准备好的语句,这使得它容易受到 SQL 注入的影响。

  • 你可以exit从你的代码中删除,它不会做任何事情

  • 的语法LIKELIKE '%string%',没有=

一个很好的 mysqli 代码示例应该如下所示。

<?php


// report all errors. Check the error log or enable display errors in PHP config

error_reporting(E_ALL);


// Always enable mysqli error reporting

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$db_conx = new mysqli('localhost', 'username', 'password', 'databaseName');

$db_conx->set_charset('utf8mb4'); // always set the charset


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

    $strid = '%'. $_POST['str'] .'%';

    // prepare -> bind -> execute

    $stmt = $db_conx->prepare("UPDATE notifications SET did_read=1 WHERE note LIKE ?");

    $stmt->bind_param('s', $strid);

    $stmt->execute();

    echo 'did_read_ok';

}


查看完整回答
反对 回复 2022-06-17
  • 1 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号