【问题标题】:Why is the result of code is different between PC and Laptop为什么PC和笔记本电脑的代码结果不同
【发布时间】:2019-12-02 16:52:51
【问题描述】:

这里有我之前威胁的声明 PHP MySQL How to select 2 specific and 1 common value over 2 tables? 有些事情让我感到困惑,但首先是重要代码部分:

$stmt = $pdo->prepare("SELECT
  table1.spediteur,
  table2.versendet,
  table2.unique_code,
  table1.unique_code
FROM table1
  INNER JOIN table2
    ON table1.unique_code = table2.unique_code
WHERE table1.unique_code = $scanned_number
AND table2.unique_code = $scanned_number
GROUP BY table1.spediteur,
         table2.versendet,
         table2.unique_code,
         table1.unique_code
HAVING table1.spediteur = 'Dachser'
AND table2.versendet = '0000-00-00 00:00:00'
");

$stmt->execute([$scanned_number]);
$result = $stmt->fetch();
if ($result) { 
?> the scanned number matches the given parameter 

<?php 
$sql = "UPDATE table2 SET versendet = date('Y-m-d H:i:s') WHERE unique_code = $scanned_number";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();

} else { 
?> the scanned number don´t matches 
<?php
}?>

这个函数只是寻找一些相似的和现有的值。 它通过 Xampp PHP 版本 7.3.7 在我的 PC 上运行 / Xampp 上的笔记本电脑版本是 7.1.11

在我的电脑上,服务器字符集是 cp1252 West European (latin1) 在我的笔记本电脑上,它也是 cp1252 West European (latin1) 。 utf8mb4 具有相同的结果。 好的,现在是最后一个序列: AND table2.versendet = '0000-00-00 00:00:00' 看看,那里有没有。

在我的 PC 上,这对于我的代码来说已经足够了,如果 保存的值是 '0000-00-00 00:00:00' -> 代码用当前日期时间更新它。

如果我在我的笔记本电脑上启动此代码,代码saye,不,'0000-00-00 00:00:00' 没有任何内容,并给我一条错误消息。 但是如果我将该代码更改为 AND table2.versendet = date('Y-m-d' H:i:s' = '0000-00-00 00:00:00') 它就像在我的电脑上一样工作,我绝对不知道为什么。

所以,如果有人理解我,请告诉我:谁是我的错。在此先感谢:)

【问题讨论】:

  • 没有聚合函数的 GROUP BY 子句没有多大意义,所以我们重新开始吧。
  • 请添加您的 xampp 服务器的 mysql 版本,并向我们展示两种结果之间的差异。如果您向我们展示您的 qiery 的 dbfiddle 版本的数据,这将有助于重现您的问题
  • SET versendet = date('Y-m-d H:i:s') - 您是否尝试在 SQL 查询中执行 PHP 函数?
  • if ($result) - 不告诉您是否找到任何行。它只会告诉您查询是否已成功执行。
  • @Paul Spiegel 谢谢你的提问。我不是专家,只是通过反复试验了解更多信息。你也帮我。下面来自草莓的代码有效。

标签: php mysql date datetime xampp


【解决方案1】:

这是一个有效查询的示例。虽然它可能无法解决您的所有问题,但它至少是一个更好的起点……

SELECT DISTINCT t1.unique_code -- pointless to select both columns when we know (because we have specified) that both hold the same value
              , t1.spediteur   -- obviously we know that this will be 'Dachser'
              , t2.versendet   -- and this will be '0000-00-00 00:00:00'
                               -- (assuming correspondong rows exist)
           FROM table1 t1
           JOIN table2 t2
             ON t2.unique_code = t1.unique_code
          WHERE t1.unique_code = ?
            AND t1.spediteur = 'Dachser'
            AND t2.versendet = '0000-00-00 00:00:00'

【讨论】:

  • 非常感谢。代码完全符合我的需要,是的 - 适用于两台计算机。另外我认为我的错误是将 PHP 代码混合到 SQL 语句中并使用查询编辑器 - 因为从那个编辑器我没有什么可学的。你的这个声明看起来很简单,我很惊讶和尊重像你这样的人分享这些知识。我必须看看这个 DISTINCT 做了什么。我很佩服。非常感谢,祝您下午愉快。 很高兴
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2017-10-10
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多