【问题标题】:PHP MYSQLI prepared statement compare datetime to GetDate() errPHP MYSQLI 准备语句比较日期时间与 GetDate() 错误
【发布时间】:2016-09-18 19:23:01
【问题描述】:

我使用 php 和 mysqli 打开到我的数据库的连接,并使用准备好的语句进行一些查询,其中一切正常,但在这个查询中,我试图只选择未来的游乐设施,一旦我莫名其妙地失败了将比较添加到 GETDATE()

date_default_timezone_set('America/Denver');

if(!($stmt = $con->prepare("SELECT r.destination, r.startDepartureTime, r.seats, r.priceperseat FROM ride r WHERE r.startZipCode = ? AND r.startDepartureTime > GETDATE()"))) echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;

if(!$stmt->bind_param("i", $userZipCode)) echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;

$stmt->execute();

$stmt->store_result();
$stmt->bind_result($destination,$departure,$seats,$price);

while($stmt->fetch()){ 
   echo "Destination : $destination Departure Time : $departure Seats Available : $seats Price Per Seat : $price <br>";
}

$stmt->close();

php 错误日志报告在准备语句行

PHP注意:试图获取非对象的属性

因此在 bind_param 行我们得到 ​​p>

PHP 致命错误:在非对象上调用成员函数 bind_param()

我最初尝试使用 NOW(),但尝试了此线程 SQL NOW() function not working properly 中的所有解决方案并且没有运气。

当我在没有 r.startDepartureTime > GETDATE() 比较的情况下运行语句时,一切正常。

并且我已确保我的数据库中的 startDepartureTime 列是日期时间类型。这是一个示例条目:2016-05-21 10:24:00,我确定确实大于当前时间并且在相同的邮政编码中,以确保我不只是收到一个空集。

【问题讨论】:

  • -&gt;prepare() 失败但您没有发现错误并继续执行您的代码时,您会收到这些错误

标签: php datetime mysqli prepare date-comparison


【解决方案1】:

GETDATE() 不是 MYSQL 函数,NOW() 应该是你需要的

也许你的意思是在查询r.startDepartureTime &lt; NOW()中使用小于而不是大于

如果准备失败,那么您需要做一些更积极的事情,只是报告错误。所以这种代码会更好用。

另外,如果准备失败,$stmt 设置为false,因此使用$stmt-&gt;errno 等将不起作用,实际上会产生更令人困惑的错误消息。因此,在这种情况下,您必须使用连接 $con 来获取错误

$sql = "SELECT r.destination, r.startDepartureTime, 
               r.seats, r.priceperseat 
        FROM ride r 
        WHERE r.startZipCode = ? 
          AND r.startDepartureTime < NOW()";

$stmt = $con->prepare($sql);

if($stmt === false) {
   echo "Prepare failed: {$con->errno} : {$con->error}";
   exit;
}

【讨论】:

  • 感谢您的成功,我仍然想要更多,感谢您在错误处理方面的帮助
猜你喜欢
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多