首页 > 解决方案 > 在 php7.2 中绑定 PDO 变量不起作用

问题描述

我无法弄清楚为什么下面的“检查 mysql 表是否存在函数”在将我的 php 版本升级到 7.2 后不再工作

它现在总是返回 false/空数组,即使表存在。

我一直尝试检查变量是否已定义并在每个阶段手动输出它们的(字符串)值。当我这样做时,我得到了预期的结果(即返回的行/秒) - 但我似乎无法绑定它们。

public function tableExists($name) {
            // Try a select statement against the table
            // Run it in try/catch in case PDO is in ERRMODE_EXCEPTION.

            $dbname = $this->DB_NAME;

            try {
                $result = $this->select("SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema = :DB_NAME AND table_name = :name", array(':DB_NAME' => $dbname, ':name' => $name));

            } catch (Exception $e) {

            // We got an exception == table not found
               $result = FALSE; //$e->getMessage();
            }

        // Result is either boolean FALSE (no table found) or PDOStatement Object (table found)
        return $result;         
        }

我下面的选择函数肯定会收到正确的值,所以我必须以不再适用于 php7.2 的方式绑定它们。

我也尝试过bindParam,而不是bindValue希望可能有效,但无济于事。

    /*
    *Select
    *@param string $sql - An SQL string
    *@param array $array - An array of parameters to bind. Default is empty array
    *@param constant $fetchMode - A PDO fetchmode. Default is fetch_assoc
    *return mixed
    */
    public function select($sql, $array = array(), $fetchMode = PDO::FETCH_ASSOC) {

        $sth = $this->prepare($sql);
            foreach ($array as $key => $value) {    

            if($value == (int)$value)
                $sth->bindValue("$key", $value, PDO::PARAM_INT);
            else
                $sth->bindValue("$key", $value);
            }

        $sth->execute();
        $this->rowCount = $sth->rowCount(); 

        return $sth->fetchAll($fetchMode);      
    }

非常感谢任何帮助!

我认为这会有所帮助 - 但它没有:PDO 语句在 PHP 7 中不再起作用

标签: phppdophp-7.2

解决方案


推荐阅读