【问题标题】:Using MySQL functions in PHP PDO prepared statements在 PHP PDO 准备语句中使用 MySQL 函数
【发布时间】:2011-11-29 02:55:26
【问题描述】:

在使用 PHP PDO 时使用 MySQL 函数的正确方法是什么? NOW() 函数被保存为字符串而不是显示时间。

$sth = $dbh->prepare("INSERT INTO pdo (namespace, count, teststring) VALUES (?, ?, ?)");
// these protect you from injection
$sth->bindParam(1, $_a);
$sth->bindParam(2, $_b);
$sth->bindParam(3, $_c);

$_a = 'Wishy-washy';
$_b = 123;
$_c = 'NOW()'; // Doesn't work. Comes out as the string 'NOW()' (w/o the quotes) and not as a date

【问题讨论】:

  • teststring 会一直是NOW() 吗?如果是这样,请直接将其放入查询中。
  • 是的。但是为了争论,是否可以使用bindParam()中的函数?

标签: php mysql pdo


【解决方案1】:

我不会将函数作为绑定参数传递:

$sth = $dbh->prepare("INSERT INTO pdo (namespace, count, teststring) VALUES (?, ?, NOW())");

$_a = 'Wishy-washy';
$_b = 123;

$sth->execute(array($_a, $_b));

【讨论】:

  • 所以根本不可能使用 bindParam 传递函数?
  • @enchance,我不这么认为。在准备语句时解析函数 - 而不是在给出数据时解析。数据在绑定时不会被解释 - 它只是被插入/发送。
  • 在编译我的 pdo 语句时,我能够检测到 ( 的存在,这可能意味着一个 mysql 函数并且没有:正常绑定它,只是按原样使用值:@987654322 @foreach ($where as $key => $value) { if (strpos($key,"(")>0) {// 您正在发送一个不可参数的密钥 $w .= " 和 " 。 $key . " = " . $value; } else { $w .= " 和 " .$key." 像 :".$key; $a[":".$key] = $value; } }跨度>
【解决方案2】:

为什么不把它换成类似..

$_c = date("H:i:s");

使用 PHP 日期函数的强大功能?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2016-07-25
    相关资源
    最近更新 更多