PHP显示查询不同的sql执行

Posted

技术标签:

【中文标题】PHP显示查询不同的sql执行【英文标题】:PHP show query different of sql execute 【发布时间】:2015-10-22 12:50:48 【问题描述】:

config.php

@$mysqli= mysqli_connect($servername, $username_bd, $password_bd, $dbname);
if($mysqli->connect_error)
    return false;

插入.php

include 'config.php';        
$DateDefault = '2015-07-30 00:00:00
2015-08-30 00:00:00';

 $sql = "INSERT INTO users (date) VALUES ('$DateDefault')";        
   if($query = $mysqli->query($sql)===true)
       echo "Date add successfully";
   else
       echo "Error into date";

显示.php

include 'config.php';

$sql = "SELECT date FROM users WHERE username='$username'";
$query = $mysqli->query($sql);
if (@$query->num_rows > 0)
    while ($dados = $query->fetch_assoc())  
        echo substr($dados['date'], 21, 19);
    

结果: "2015-08-30 00:00:00"

现在,当我在 phpmyadmin 中更改日期时,

"2015-07-30 00:00:00
2015-09-30 00:00:00"

显示这个:

"015-09-30 00:00:00 "

在 localhost 中,使用 wampserver,不会发生此错误

【问题讨论】:

date 列是两个日期? 感谢您的回复,日期列是 'utf8_unicode_ci' 不是字符集。实际上列中的数据是两个日期?列不能是日期时间字段,可能是varchartext 【参考方案1】:

您的问题很可能与how different operating systems treat line endings 有关。简而言之,在 Windows 上,行尾占用两个字符(回车和换行,\r\n),而在大多数其他操作系统上,它们只占用一个(换行,\n)。通过使用特定的字符偏移量,您正在引入您所看到的非一错误的可能性。

一个简单的解决方法是使用单个空格(或另一个字符)而不是换行符来分隔日期。如果还想使用换行符,可以split the string by whitespace:

$dates = preg_split('/\s+/', $dados['date']); // Split dates by whitespace
echo $dates[1]; // Print the second date

【讨论】:

我的本地主机在 Windows 中运行,服务器在 Linux 中运行。每个操作系统都以不同的方式使用行尾。我选择您的第二个解决方案,因为当我需要手动更新时,更容易在 phpmyadmin 中看到带有行尾的日期。感谢您解决我的问题@Jacob budin

以上是关于PHP显示查询不同的sql执行的主要内容,如果未能解决你的问题,请参考以下文章

PHP 和 MySQL 使用相同的查询显示不同的结果

在 PHP 执行时显示加载图像

PHP + Mysql:来自第一个查询的动态表名,用于执行第二个查询

PHP执行SQL查询

使用 haproxy 和 php websocket 执行查询

从 php 执行的 python 脚本给出错误