【问题标题】:Updating data in mysql table更新mysql表中的数据
【发布时间】:2013-09-24 16:25:20
【问题描述】:

我正在尝试查看 keyWord 是否已存在于表 searchedWords 中。如果是这样,那么该国家将增加一。如果它在表中不存在,那么我使用 INSERT。问题是,传递给站点的关键字没有存储在数据库中。另一个大问题是国家不加在。是因为if语句吗?或者是while循环?

<?php
date_default_timezone_set('Asia/Manila');
$today = date('m-d-Y');
echo $today;
$urltopost = "http://opac.usls.edu.ph/TLCScripts/interpac.dll?Search";
$datatopost = "FormId=0&Config=pac&LimitsId=0&StartIndex=0&SearchField=7&SearchType=1&ItemsPerPage=20&SearchData=$_POST[keyWord]";
$ch = curl_init ($urltopost);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $datatopost);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$returndata = curl_exec ($ch);
echo $returndata;
$con=mysqli_connect("...","...","...","...")or die ('Error: ' . mysql_error());
$sql= "SELECT * FROM searchedWords";
$result= mysqli_query($con,$sql);


 while($row=mysqli_fetch_array($result, MYSQLI_ASSOC))
{            
        if($row['keyWord']==$_POST[keyWord])
         {
         $upD="UPDATE searchedWords SET countr = countr + 1 WHERE keyWord = '".$row['keyWord']."'";
          while (!mysqli_query($con,$upD))
          {
           die('Error: ' . mysqli_error($con));
           }
         }
        else
        {
         $insertIn="INSERT INTO `searchedWords`( `keyWord`, `countr`) values ('$_POST[keyWord]',1)";
      while (!mysqli_query($con,$insertIn))
          {
          die('Error: ' . mysqli_error($con));
          }
        } 
}
?>

感谢那些可以帮助我的人。

【问题讨论】:

  • 请,在您编写任何更多的 SQL 接口代码之前,您必须阅读 proper SQL escaping 以避免严重的 SQL injection bugs。使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 从不使用字符串插值来完成此操作。
  • if($row['keyWord']==$_POST[keyWord]) 对这两个变量执行 var_dump。

标签: php mysql sql increment


【解决方案1】:

你为什么要让事情变得复杂......尝试简单的方法

$KeyWord = $_POST['keyWord']; //Do not forget to sanitize this for security
$sql= "SELECT * FROM searchedWords WHERE keyWord='$KeyWord'";
$result= mysqli_query($con,$sql);
$count= mysqli_num_rows($result);

if($count) {
$upD="UPDATE searchedWords SET countr = countr + 1 WHERE keyWord = '$keyWord'";
mysqli_query($con,$upD);
} else {
$insertIn="INSERT INTO `searchedWords`( `keyWord`, `countr`) values ('$keyWord',1)";
mysqli_query($con,$insertIn); }

【讨论】:

  • 感谢您的帮助。这是我在编码时经常犯的错误之一。除了忘记 ;'s 和 "'s 之外,我还在循环和 if else 语句中迷失了方向。几分钟后,我发现自己正在咀嚼芯片或在 Photoshop 中未完成的工作。
【解决方案2】:

在循环中运行 sql 查询是非常糟糕的做法。尝试使用这样的查询来更新所有现有的关键字:

    $keyword = htmlspecialchars($_POST['keyWord']);

    UPDATE searchedWords SET countr = countr + 1 WHERE keyWord = '".$keyword."'";

没有更多的循环!

为了更安全、更高效地使用数据库,请查看http://php.net/manual/en/pdo.prepared-statements.php

【讨论】:

猜你喜欢
  • 2017-09-06
  • 2017-12-13
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多