【问题标题】:Incorrect value is saved to MySQL DB from PHP code错误的值从 PHP 代码保存到 MySQL DB
【发布时间】:2013-08-28 21:29:00
【问题描述】:
$query="SELECT MINUTE (ETA - STA) 
FROM `FlightSchedule` WHERE `flightNum_arr`='".$flightNum_arr."';";

$delay=ejecutar_query($query);

$query = "UPDATE `FlightSchedule` 
SET `delay`='".$delay."' 
WHERE `flightNum_arr`='".$flightNum_arr."';";

$result=ejecutar_query($query);

它不是保存分钟值,而是保存Resource id#。如何解决这个问题?

【问题讨论】:

  • $delayejecutar_query 的资源,您需要在此步骤之后获取行并将其插入到下一个查询中

标签: php mysql datetime minute


【解决方案1】:

您必须使用

获取数据
$row = ejecutar_fetch_assoc($delay); // something like that but not sure

修改您的更新查询。

$query = "UPDATE `FlightSchedule` 
SET `delay`='".$row['delay']."' 
WHERE `flightNum_arr`='".$flightNum_arr."';";

还稍微修改一下选择查询。

$query="SELECT MINUTE (ETA - STA) AS delay
FROM `FlightSchedule` WHERE `flightNum_arr`='".$flightNum_arr."';";

【讨论】:

  • 调用未定义函数'ejecutar_fetch_assoc'
  • @KlausosKlausos 我告诉过你不确定fetch_assoc 功能。
  • @KlausosKlausos 您可能应该建议在代码中更改对 PDO 和准备好的语句的方法调用。它们更安全、更可靠——您也可以在代码中直接将它们作为对象返回。
【解决方案2】:

在您的代码中,$delay 不是行中的数据,而是代表结果的整个对象。

你可以尝试在这样的一个语句中做到这一点:

update `FlightSchedule` set delay=(SELECT MINUTE (ETA - STA) 
FROM `FlightSchedule` WHERE `flightNum_arr`='".$flightNum_arr."');";

编辑:

试试这个来绕过 MySQL 所做的傻锁 :)

update `FlightSchedule` set delay=(select * from (SELECT MINUTE (ETA - STA) 
FROM `FlightSchedule` WHERE `flightNum_arr`='".$flightNum_arr."'));";

编辑 2:(也就是我应该测试我的查询,而不仅仅是在我的头上乱写它们......)

mysql> select * from updatetest;
+------+------+
| var1 | var2 |
+------+------+
|  450 |    1 |
|  100 |    5 |
+------+------+
2 rows in set (0.00 sec)

mysql> update
    updatetest set var2=
        (select * from
            (select var2 from updatetest where var1=100)
        updater);
Query OK, 1 row affected (0.00 sec)
Rows matched: 2  Changed: 1  Warnings: 0

mysql> select * from updatetest;
+------+------+
| var1 | var2 |
+------+------+
|  450 |    5 |
|  100 |    5 |
+------+------+
2 rows in set (0.00 sec)

【讨论】:

  • $query="UPDATE FlightSchedule SET delay=(SELECT MINUTE (ETA - STA) FROM FlightSchedule WHERE flightNum_arr='".$flightNum_arr."') WHERE flightNum_arr= '".$flightNum_arr."';"; $result=ejecutar_query($query);但它并没有保存任何东西。
  • @KlausosKlausos 当您这样回显查询时,您的查询会显示什么?您确定$flightNum_arr 的数据正确地存在于变量中吗?
  • 表示:您不能在 FROM 子句中指定目标表 'FlightSchedule' 进行更新
  • @KlausosKlausos 哦,是的,抱歉,忘记重新包装了。见编辑。
  • 现在它说每个派生表都必须有自己的别名
猜你喜欢
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多