yka*_*kat 8 php postgresql pdo
我有这样的查询:(在Postgresql 8.4,PHP-fpm 5.3.10(fpm-fcgi))
select * from users where now() - interval '2 minutes' < seenlast ORDER BY seenlast;
Run Code Online (Sandbox Code Playgroud)
我想使用PHP/PDO查询,所以:
$mymin=5; //this is a variable can be changed by $_GET
$query = $db_conn->prepare("select * from users where now() - interval ':myminute minutes' < seenlast ORDER BY seenlast");
$query->bindParm(":myminute",$mymin)
$query->execute;
Run Code Online (Sandbox Code Playgroud)
这不起作用,我找不到以合适的方式传递分钟($ mymin)的方法.如果我硬编码时间工作,那么代码的其他部分必须是正确的.
我也尝试过:
$temp=$mymin." minutes";
$query = $db_conn->prepare("select * from users where now() - interval :myminute < seenlast ORDER BY seenlast");
$query->bindParm(":myminute",$temp)
Run Code Online (Sandbox Code Playgroud)
我不太了解PDO或PHP,但我想我知道这里出了什么问题.
当你这样说:
interval '3 minutes'
Run Code Online (Sandbox Code Playgroud)
你真的在执行一个与以下相同的强制转换操作:
'3 minutes'::interval
cast('3 minutes' as interval)
Run Code Online (Sandbox Code Playgroud)
所以你正在做的是将一个TEXT值转换为INTERVAL.这意味着您需要生成看起来像字符串的东西'3 minutes'.您可以使用字符串连接将字符串片段粘贴在一起:
# Use cast to make the precedence cleaner.
$query = $db_conn->prepare("select * from users where now() - cast(:myminute || ' minutes' as interval) < seenlast ORDER BY seenlast");
$query->bindParm(":myminute", $mymin)
Run Code Online (Sandbox Code Playgroud)
或者你应该能够在PHP中进行字符串争论:
$query = $db_conn->prepare("select * from users where now() - interval :myminute < seenlast ORDER BY seenlast");
$query->bindParm(":myminute", $mymin . ' minutes')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4820 次 |
| 最近记录: |