【问题标题】:PDO Select with Question Marks and unknown number of variablesPDO 选择带问号和未知数量的变量
【发布时间】:2013-09-19 18:52:01
【问题描述】:

我正在尝试创建一个 PDO 函数,但在绑定参数方面遇到了困难。通常我会使用 :field 方法,但在这种情况下我不知道变量的数量或名称。

function fetch($field,$table,$query,$values){

    global $kdb;

    $sql = "SELECT $field FROM $table $query";

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

    $num = 1;
    foreach($values as $value){ $stmt->bindParam($num, $value); $num += 1;}

    $stmt->execute();
    $row = $stmt->fetch();
    return $row;
} 

这将在这样的页面上调用(我将添加程序以避免注入)

print_r(fetch("*","user","WHERE `ID` = ? AND `forename` = ?",array('1','Robin')));

我认为问题在于$stmt->bindParam($num, $value);,但我不明白为什么。

【问题讨论】:

  • “我认为问题在于...” 什么问题?您收到错误消息吗?你实际上并没有告诉我们。

标签: php mysql pdo sqlbindparameter


【解决方案1】:

过度复杂化的罪名。

去掉bundParam函数,在数组内的execute语句中按顺序添加变量。

function fetch($field,$table,$query,$values){

    global $kdb;

    $sql = "$function $field FROM $table $query";

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

    $stmt->execute($values);

    $row = $stmt->fetch();
    return $row;
}

【讨论】:

  • 说实话,这整个方法有点过于复杂,但无论如何 +1 是一个好的提示:)
【解决方案2】:

在撰写本文时,您实际上并没有告诉我们出了什么问题,但可能导致问题的一件事是bindParam()通过引用绑定了一个变量。由于您只想传入数组中的特定值,bindValue() 可能更合适。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2019-03-13
    • 2011-03-11
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多