Laravel MySQL 在本地计算机上工作但不在远程
Posted
技术标签:
【中文标题】Laravel MySQL 在本地计算机上工作但不在远程【英文标题】:Laravel MySQL working on local computer but not remote 【发布时间】:2014-01-03 05:55:18 【问题描述】:我正在尝试部署我的 Laravel (4.1) 应用程序,但我遇到了与 mysql 一起正常工作的问题。我已经把范围缩小到了这里...
$curSessions = DB::table('sessions')->where('beginDate', '<', $curDate)->where('endDate', '>', $curDate)->get();
我尝试将其更改为以下内容并按预期返回。 (但显然记录太多了)
$curSessions = DB::table('sessions')->where('beginDate', '<', $curDate)->get();
这不起作用。它不返回任何错误和一个空数组。
$curSessions = DB::table('sessions')->where('endDate', '>', $curDate)->get();
然后我让它回显它发出的最后一条语句 (DB::getQueryLog();
),当我在 phpMyAdmin 的 SQL 框中输入它时,它输出的查询有效。
要清楚。查询日志显示:
array(1) [0]=> array(3) ["query"]=> string(64) "select * from
sessions
wherebeginDate
endDate > ?" [“绑定”]=> 数组(2) [0]=> 字符串(8)“2014-1-3”[1]=> 字符串(8)“2014-1-3” [“时间”] => 浮动(0.26)
当我将“2014-1-3”插入“?”时有用。
问题是...这适用于我运行 MAMP 的计算机,但不适用于远程服务器。我检查了数据库结构以确保 endDate
和 beginDate
都设置为“日期”。
任何的想法?
【问题讨论】:
手动输入的查询在服务器上有效吗? 通过myphpadmin中的MYSQL查询框。或许有些用处。我在玩 DB::raw,我认为这可能是 pdo 处理日期的方式?当两个日期都没有用引号转义时,查询失败。是否有可能在我的计算机上,MYSQL 服务器对格式错误的查询比在我的服务器上的 asmallorange 更宽松?或者更好的是,pdo 是如何用 ?句法?也许我想太多了。 我也是这么想的。但是,这会很奇怪,因为日期只是作为字符串绑定的。 为了确定,您是否尝试传递字符串“2014-01-03”而不是“2014-1-3”?你是在传递一个 PHP 日期对象吗? 我明白了!我意识到在日期格式中我使用的日期没有前导零。非常感谢!如果您想添加您刚才所说的作为解决方案,我会将其标记为正确。 【参考方案1】:您只需要确保包含前导 0(如 matpop 建议的那样)。
【讨论】:
【参考方案2】:首先,您应该检查您的表格日期类型是否与您查询的内容相同。 例如,如果您的表 beginDate 列是时间戳,那么您的 $curDate 变量应该是时间戳的实例。这样做你可以这样做:
$curDate = Carbon::createFromDate("year", "month", "day");
然后你就可以使用 eloquent 内置的 laravel,如下所示:
$curSessions = Sessions::where('beginDate', '<', $curDate)
->where("endDate", ">", $curDate)->get();
仅供参考:您可以使用 whereBetween
进行日期时间段检查的另一个运算符,我在这里举一个例子,以便您检查它是否能完成您的工作。
$curSessions = Sessions::whereBetween('beginDate', array($beginDate, $endDate))->first();
【讨论】:
以上是关于Laravel MySQL 在本地计算机上工作但不在远程的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2 session flash 在本地主机上工作但在服务器上不工作?
laravel 中的护照详细信息 api 在本地主机上可以正常工作,但不能在共享主机上运行