从MySQL日志表查询指定表最大update_time时PHP代码报错求助
解决strtotime()参数类型错误的问题
嘿,我来帮你搞定这个报错!你遇到的strtotime() expects parameter 1 to be string, object given错误,根源很简单:$con->query()执行后返回的是一个MySQLi结果对象,不是直接的时间字符串,strtotime()自然没法处理对象类型的参数。
咱们一步步修正代码:
核心问题拆解
当你执行$con->query(...)时,MySQL返回的结果不会直接是你要的时间值,而是一个封装了查询结果的对象,你需要从这个对象里提取出实际的时间数据。
修正后的完整代码
<?php $con = mysqli_connect("localhost","root","","db"); // 检查连接是否成功 if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); exit; // 连接失败直接终止,避免后续无效执行 } // 给聚合结果起个别名,方便后续取值 $query = "SELECT MAX(update_time) AS max_update_time FROM log_tbls WHERE table_name = 'abc'"; $result = $con->query($query); // 检查查询是否执行成功 if (!$result) { echo "Query failed: " . $con->error; exit; } // 从结果对象中取出一行数据 $row = $result->fetch_assoc(); // 获取最大时间,处理无匹配数据的情况 $maxUpdateTime = $row['max_update_time'] ?? null; if ($maxUpdateTime) { // 因为update_time是timestamp类型,取出的已经是标准时间字符串,可直接转换 $timestamp = strtotime($maxUpdateTime); echo date("Y-m-d H:i:s", $timestamp); } else { echo "No records found for table 'abc'"; } // 释放结果集资源 $result->free(); // 关闭数据库连接 $con->close(); ?>
额外注意事项
- 给聚合结果起别名:用
AS max_update_time给MAX(update_time)命名,后续取值时更清晰,避免因为匿名结果列导致的取值错误。 - 错误处理:增加了查询失败的判断,以及无匹配数据的处理,避免程序遇到异常情况直接崩溃。
- 资源释放:用完结果集后调用
free()释放内存,最后关闭数据库连接,养成良好的编码习惯。
内容的提问来源于stack exchange,提问作者Sarah_Salar
相关产品推荐
相关产品推荐

