【问题标题】:MYSQL query calling POST variableMYSQL 查询调用 POST 变量
【发布时间】:2014-03-03 21:12:33
【问题描述】:
session_start();

$CompanyName = $_POST['CompanyName'];
$result = mysqli_query ("select CustomerID from CompanyInfo where CompanyName = '.$CompanyName.'");
$row = mysql_fetch_row($result);
$_SESSION["CustomerID"] = $row[0];

我觉得我的报价有问题,但我无法弄清楚。

谢谢。

【问题讨论】:

  • 请,在您编写任何更多的 SQL 接口代码之前,您必须阅读 proper SQL escaping 以避免严重的 SQL injection bugs。使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 避免使用字符串插值来实现这一点。 从不$_POST 数据直接放入查询中。
  • 是的,这是错误的,您很容易受到sql injection attacks 的攻击。问题的真正解决方案是从根本上改变您编写查询的方式。您还混合了 mysqli(注意 i)和 mysql(没有 i)调用,这也是不可能的。换句话说,你的代码完全被破坏了。
  • 您已经在使用mysqli。好的! (好吧,部分,正如 Marc B 注意到的)更进一步,使用参数绑定。此处为随机 StackOverflow 示例:stackoverflow.com/questions/15748254/…
  • 您的意思是在第 5 行中使用 mysqli_fetch_row 而不是 mysql_fetch_row(注意 i)?

标签: php mysql


【解决方案1】:

看起来除了你的引用被搞砸了而且代码被破坏了

试试这个

$result = mysqli_query ($link, "select CustomerID from CompanyInfo where CompanyName = '$CompanyName'");
$row = mysqli_fetch_row($result);


mysqli_query() 至少需要 2 个参数
$link 作为您的连接字符串,我确定在代码中的某处被调用。如果不是,那可能是问题 #1

这应该给你输出:

echo "row: " .$row[0];

您可以将其传递给会话。

$_SESSION["CustomerID"] = $row[0];

【讨论】:

    【解决方案2】:
    $CompanyName = $_POST['CompanyName'];
    $result = mysqli_query ("select CustomerID from CompanyInfo where CompanyName ='" .$CompanyName."'");
    $row = mysqli_fetch_row($result);
    $_SESSION['CustomerID'] = $row[0];
    

    【讨论】:

      【解决方案3】:

      是的。

      $result = mysqli_query ("select CustomerID from CompanyInfo where CompanyName = '".$CompanyName."'");
      

      注意连接字符串的额外引号,或者你可以放弃点而直接做

      $result = mysqli_query ("select CustomerID from CompanyInfo where CompanyName = '$CompanyName'");
      

      您还应该使用mysqli_real_escape_string 来防止SQL 注入,或者使用PDO。您问题的 cmets 将为您提供大量资源,但我只是在您的问题范围内回答

      【讨论】:

        【解决方案4】:

        试试这个:

        mysqli_query ("select CustomerID from CompanyInfo where CompanyName = '".$CompanyName."');
        

        需要关闭双引号。

        【讨论】:

        • 你忘记了单引号后面的双引号。这是一个开放的字符串,解析时会失败。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-14
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多