【问题标题】:Update MySQL statement not firing更新 MySQL 语句未触发
【发布时间】:2014-01-14 12:11:26
【问题描述】:

请注意,我使用以下cURL 代码从另一个页面调用此页面:

$chx = curl_init();
    curl_setopt($chx, CURLOPT_URL,"../php/giveactions.php");
    curl_setopt($chx, CURLOPT_POST, 1);
    curl_setopt($chx, CURLOPT_POSTFIELDS, "user=myname&actions=10&addy=DCGyHh6cy46ZYqwyy5PzMYLujLZVoPJVPE");
    curl_setopt($chx, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($chx, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($chx, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($chx, CURLOPT_SSLVERSION,3);
    $server_output = curl_exec($chx);
    curl_close ($chx);

我有一个 PHP 函数页面,其中包含以下代码:

<?
    require('db.php');

    $moreactions = 0;
    $totalActions = 0;

    if (isset($_POST["user"])) {
        $user_id = $_POST["user"];
    }
    if (isset($_POST["actions"])) {
        $moreactions = $_POST["actions"];
    }
    if (isset($_POST["addy"])) {
        $addy = $_POST["addy"];
    }

    $moreactions = round($moreactions / 10);

    $query = "SELECT * FROM `systems` WHERE `name` = '$user_id';" or die(mysql_error());
    $results = mysql_query($query);

    while($row = mysql_fetch_array($results)) {
        $actions = $row["actions"];
    }

    $totalActions = $actions + $moreactions;

    mysql_query("UPDATE `systems` SET actions=" . $totalActions . " WHERE `name` = '".$user_id."';") or die(mysql_error());

    echo "200ok";

    mysql_close();
?>

出于某种原因,我可以很好地输出$totalActions(计算完美等)。但是使用 Rest Post 客户端,当我在 Web 服务器上尝试它时,它会执行除 UPDATE MySQL 行之外的所有操作...

对于这个问题的含糊之处,我深表歉意,我将根据 cmets/answers 进行修改。

在此先感谢小伙子们和小伙子们

编辑:变量回显很好,MySQL 查询也很好回显,所有变量设置正确

编辑 2:请注意,“200ok”也会在文件末尾很好地回显!

【问题讨论】:

  • “UPDATE systems SET actions =".$totalActions." WHERE name = '".$user_id."';"怎么样?
  • 确保在字段和表名前添加了`
  • 这正是我已经拥有的......
  • 它实际上是在执行查询还是给您带来任何错误?
  • @AbhikChakraborty - 似乎没有影响

标签: php mysql


【解决方案1】:

解决方法是 cURL CURLOPT_URL 必须是非相对的。
所以http://www.blah.com/whatever.php 而不是/whatever.php

感谢大家的帮助!

【讨论】:

  • 哦,多么奇怪的问题。如果这是一个错误,为什么它会执行第一部分?很奇怪XD
  • 仍然提示:您的脚本可能会受到 SQL 注入的攻击,因为您不会逃避外部输入。也许你也想解决这个问题;)
【解决方案2】:

我猜你使用 REST post 客户端传输 POST 变量用户。

当只是通过浏览器访问时,$_POST["user"] 不会被设置,因此 UPDATE 中的 WHERE 子句不匹配。

【讨论】:

  • 但是当我回显 mysql 查询时,它说:"UPDATE systems` SET actions=1 WHERE name = 'myname';"`
  • 如果您确定 UPDATE 正在执行并且没有抛出错误,那么我很确定问题与 WHERE 子句有关。
  • 从你的回答中我怀疑,整个脚本根本就没有被执行过。
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 2014-10-10
  • 1970-01-01
  • 2013-07-14
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
相关资源
最近更新 更多