<input id="URZBh"></input>

  • <hgroup id="URZBh"></hgroup>

    <del id="URZBh"></del>

  • <object id="URZBh"><tfoot id="URZBh"><link id="URZBh"><tr id="URZBh"></tr></link></tfoot></object>

    PDO 同时使用“命名参数”和“问号参数”报错

    浏览:677 发布日期:2020/01/21
    5.0.0 - 严重 - 未处理
    PDO 同时出现“命名参数”和“问号参数”报错
    解决方法(参数转换):
    在think/db/Connection的query方法前面加上下面代码
    $this->solveMixedParams($sql, $bind); //解决PDO混合参数问题


    /**
    * 解决PDO混合参数问题
    * @param String $sql
    * @param array $bind
    */
    private function solveMixedParams(&$sql, &$bind) {
    //判断混合参数
    if (strpos($sql, '?') === false || strpos($sql, ':') === false) return ;
    $hasNamedParam = false;
    $newBind = [];
    $search = [];
    $replace = [];
    foreach ($bind as $k => $v) {
    if (!is_numeric($k)) {
    $search[] = ':'. $k;
    if (is_array($v) && count($v)>1) {
    $replace[] = '?';
    $newBind[] = $v[0];
    } elseif (is_string($v) || is_bool($v) || is_int($v) || is_float($v)) {
    $replace[] = '?';
    $newBind[] = $v;
    } else {
    $replace[] = '?';
    $newBind[] = null;
    }
    $hasNamedParam = true;
    } else {
    $newBind[] = $v;
    }
    }
    if ($hasNamedParam) {
    $bind = $newBind;
    $sql = str_replace($search, $replace, $sql);
    }
    unset($newBind, $hasNoParsedParam, $search, $replace);
    }

    评论(
    后面还有条评论,点击查看>>