【问题标题】:PHP show query different of sql executePHP显示查询不同的sql执行
【发布时间】: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

标签: php mysql


【解决方案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
猜你喜欢
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
相关资源
最近更新 更多