Mysql问题整理

Yii2数据库报错-SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

PHPer 2018-01-18 133次浏览 0条评论 0 0 0
在提交表单时遇到了报错,在本地运行没问题,但是线上的项目只要提交内容稍多就会报错。PHP代码是一样的,于是想到是服务器配置那里和本地的不一样导致的,但是提示是...

在提交表单时遇到了报错,在本地运行没问题,但是线上的项目只要提交内容稍多就会报错。PHP代码是一样的,于是想到是服务器配置那里和本地的不一样导致的,但是提示是没绑定,于是就像办法换了几种Yii2数据库操作的方式问题还在,最后在网上查,下面的分析基本是ok的,但是解决办法给的不好。尝试了后还是会报错。最后找到了解决的办法,我会在最后说。


网上的一篇分析:

地址:http://blog.csdn.net/cor_twi/article/details/53098...

并不是参数没有绑定,查看findAll()的源码

public function findAll($condition='',$params=array())
{
    Yii::trace(get_class($this).'.findAll()','system.db.ar.CActiveRecord');
    $criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
    return $this->query($criteria,true);
}

query实际上执行的是:

$command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria);
$command->queryAll();

而createFindCommand()
调用bindValue(),里面的代码如下:

$this->_statement->bindValue($name,$value,$this->_connection->getPdoType(gettype($value)));

连接已经timeout,失效了。bindValue无用。

queryAll()  --> queryInternal('fetchAll',PDO::FETCH_ASSOC,[]);
-->三次调用 queryInternalAll('fetchAll',PDO::FETCH_ASSOC,[])

简化的queryInternalAll如下:

private function queryInternalAll($method,$mode,$params=array())
{
    $params=array_merge($this->params,$params);   
    try
    {
        $this->prepare();
        @$this->_statement->execute();
        {
            $mode=(array)$mode;
            call_user_func_array(array($this->_statement, 'setFetchMode'), $mode);
            $result=$this->_statement->$method();
            $this->_statement->closeCursor();
        }
        return $result;
    }
    catch(Exception $e)
    {
        $errorInfo=$e instanceof PDOException ? $e->errorInfo : null;
        $message=$e->getMessage();

        if(YII_DEBUG)
            $message.='. The SQL statement executed was: '.$this->getText().$par;

        if(!empty($errorInfo) && (2006 == $errorInfo[1] || 2013 == $errorInfo[1])) {
            $this->_connection->setActive(false);
            $this->cancel();
        }
        throw new CDbException(Yii::t('yii','CDbCommand failed to execute the SQL statement: {error}',
            array('{error}'=>$message)),(int)$e->getCode(),$errorInfo);
    }
}

这样就看到了...

登录 | 立即注册

更新于:2018-01-21 04:01:39
    您需要登录后才可以评论。 登录 | 立即注册
    相关内容

    MySQL数据库设计总结

    规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字...

    什么是B-Tree

    二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比

    Yii2模型简介

    模型Model是MVC模型中的M,是业务数据、业务规则和业务逻辑的对象。Yii很好的展现了这点,用户可用创建自己定义的模型,比如给一个的表单定义一个模型,这样就把表...

    Yii2模型简介-属性

    Yii2模型简介-场景

    Yii2模型简介-验证规则

    Yii2模型简介-块赋值

    Yii2模型简介-非安全属性

    Yii2模型简介-数据导出

    Yii2模型简介-字段

    Yii2模型简介-最佳实践

    Yii2扩展整理

    这里整理一些自己实测好用的Yii2扩展 20200406

    【坑,勿用】Yii的yii-xunsearch扩展,支持中文的搜索引擎,支持全文索引全文搜索

    简单,易用的yii2导入和导出组件( illusion/yii2-excel)

    Yii2小部件Widget

    Widgets 小部件kop/yii2-scroll-pager:瀑布滚动翻页 样式不怎么好看,必须点击更多才能加载更多yii2-widget-linkpager:带分页大小的分页栏 用了,还不错的yii2-ajaxf...

    Yii2 学习内容整理

    Yii2片段缓存详解yii2常用表单处理方法php yii2 出现mysql-gone-away-2006解决Yii2 数据操作DAO【翻译】 MySQL中yii2使用原生sql CURD...

    Yii2片段缓存详解

    yii2常用表单处理方法

    php yii2 出现mysql-gone-away-2006解决

    Yii2 数据操作DAO

    【翻译】 MySQL中yii2使用原生sql CURD

    一篇为你讲透Yii2的widget

    Yii2模块学习

    Yii2提交表单提示无法验证

    解决Yii2 在线上服务器无法访问GII 和BUG工具栏问题

    Yii2 Model的一些常用验证rules规则

    关于Yii2控制器的layout属性

    yii2如何开启debug工具栏

    使用Yii2发送邮件

    Yii2多表联结子查询的应用

    学习yii2.0——数据缓存、片段缓存、页面缓存、http缓存

    Yii2 获取模块名、控制器名、方法名

    收发邮件(Mailing) | Yii 2.0 权威指南

    Yii2中各种文本框的使用 [ 2.0 版本 ]

    推荐内容

    使用Yii2遇到的问题整理

    Yii的东西很多,学习和使用的时候遇到了各种各样的问题,这里记录整理下,方便大家分享。composer安装kartik-v/yii2-mpdf时报错,这里记录下 Yii2用compos...

    Yii2用composer更新时遇到的错误

    Yii2 用composer update 时提示'git' 不是内部或外部命令,也不是可运行的程序或批处理文件

    Yii2​用composer安装kartik-v/yii2-mpdf时报错,成功解决后,再让其支持中文。

    使用Yii2的setFlash和bootstrap.min.js遇到的问题,bootstrap.min.js的bug?

    Yii2的action不支持大小写吗?其实是支持的

    composer install 使用tips-网上找的composer install的使用技巧方法

    关于编程时遇到意想不到的错误如何解决

    比如当你写的一个php脚本执行出现问题,如果你的脚本里自己带了对错误的处理,可能会显示那里出错了。或者你用的框架,框架里有debug模式,会报错。

    使用Laravel 5.4问题总结

    这里写下laravel5.4的总结,用laravel也有段时间了,优点就不用多说了,好上手,较易学较易用,blade模板是非常的好用,等等。laravel的缺点有几个,灵活性一般,框架稍...

    使用Laravel 5.4问题总结 Lost connection to MySQL server at 'reading initial communication ...

    Laravel 5.4各种错误提示总结

    localStorage介绍和使用

    一、什么是localStorage、sessionStorage在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(co...

    localStorage的使用

    localStorage其他注意事项