thinkphp无法调用add方法和save方法

brady_wan 2013-12-23 04:12:04
在thinkphp调用add方法时就提示无法访问http://localhost..../insert

public function insert() {
header('Content-type:text/html; charset=utf-8');
date_default_timezone_set('Etc/GMT-8');
$article = M('article');
$data = array();
$data['title'] = $_POST['title'];
$data['author'] = $_SESSION['username'];
$data['category'] = $_POST['category'];
$data['content'] = $_POST['content'];
$data['createtime'] = strtotime(date("Y-m-d"));
if($data['category'] == '请选择' || $data['title']=='') {
$this->error('数据写入不完整,请重新输入');
}
$result = $article->add($data);

}

执行到add方法就停止了,如果//add()这行在执行print_r($data);
数据完完整整的输出来了,这是为什么,如果用$article->execute($sql)
执行就可以插入数据。
...全文
698 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
brady_wan 2013-12-26
  • 打赏
  • 举报
回复
我使用其他人的php5.2.8版本可以完美执行而我的php6.0则出问题。。。
brady_wan 2013-12-26
  • 打赏
  • 举报
回复
我用别人的环境就可以执行,我的appserv有问题,还是PHP版本的问题?
brady_wan 2013-12-26
  • 打赏
  • 举报
回复
这怎么调试 ,不会呀。。。
xuzuning 2013-12-25
  • 打赏
  • 举报
回复
你可以在 Db.class.php 的 773行附近的
    public function insert($data,$options=array(),$replace=false) {
        $values  =  $fields    = array();
        $this->model  =   $options['model'];
        foreach ($data as $key=>$val){
            $value   =  $this->parseValue($val);
            if(is_scalar($value)) { // 过滤非标量数据
                $values[]   =  $value;
                $fields[]     =  $this->parseKey($key);
            }
        }
        $sql   =  ($replace?'REPLACE':'INSERT').' INTO '.$this->parseTable($options['table']).' ('.implode(',', $fields).') VALUES ('.implode(',', $values).')';
        $sql   .= $this->parseLock(isset($options['lock'])?$options['lock']:false);
        return $this->execute($sql);
    }
中逐条检查数据是否正确 你用 execute 可以插入,只表示你手写的sql指令没有错误 而 add 方法插入失败则表示程序组装sql指令时出现了问题
brady_wan 2013-12-25
  • 打赏
  • 举报
回复
问题是在log文件里没有找到记录,无从下手
brady_wan 2013-12-25
  • 打赏
  • 举报
回复
我的model类:

<?php 
	class ArticleModel extends Model {
		protected $_validate=array(
			array('title','require', '标题不能为空'),
			array('author','require', '作者必须要'),
			array('category','require', '文章类型不能为空'),
			array('content','require','文章内容不能为空'),
			array('createtime','require','发表时间必须')
		);
	}
 ?>
我都测试好长时间了,为什么老是不行,难道是配置文件问题 要不我把我的ThinkPHP model的add()方法贴出来看看 我测试时读取数据可以,但插入和修改就出问题。。。 Thinkphp源码add方法,求指导:

public function add($data='',$options=array(),$replace=false) {
        if(empty($data)) {
            // 没有传递数据,获取当前数据对象的值
            if(!empty($this->data)) {
                $data           =   $this->data;
                // 重置数据
                $this->data     = array();
            }else{
                $this->error    = L('_DATA_TYPE_INVALID_');
                return false;
            }
        }
        // 分析表达式
        $options    =   $this->_parseOptions($options);
        // 数据处理
        $data       =   $this->_facade($data);
        if(false === $this->_before_insert($data,$options)) {
            return false;
        }
        // 写入数据到数据库
        $result = $this->db->insert($data,$options,$replace);
        if(false !== $result ) {
            $insertId   =   $this->getLastInsID();
            if($insertId) {
                // 自增主键返回插入ID
                $data[$this->getPk()]  = $insertId;
                $this->_after_insert($data,$options);
                return $insertId;
            }
            $this->_after_insert($data,$options);
        }
        return $result;
    }
码无边 2013-12-25
  • 打赏
  • 举报
回复
$result = $article->add($data); 或者改成 $result = $article->data($data)->add();
码无边 2013-12-25
  • 打赏
  • 举报
回复
//if($data['category'] == '请选择' || $data['title']=='') { //$this->error('数据写入不完整,请重新输入'); // } 把上面这句话注释掉 $result = $article->add($data); echo $article->getLastSql(); 再试试、还有检查下,你的model,是否做了验证。
brady_wan 2013-12-24
  • 打赏
  • 举报
回复
按你说的输出:ok 我的问题是这样的,它把数据传递过去了。 print_r($data); 不加$article->add($data); 一切执行正常,可以将数组中的内容输出来 我还用$article->execute($aql) 执行sql语句,可以插入到数据库,在数据库中有 数据,会不会是我的php 6.0版本的问题?和 Thinkphp有冲突。 同时感谢你们的回答
码无边 2013-12-24
  • 打赏
  • 举报
回复
修改insert方法 public function insert() { die("ok"); } 调用Article/insert 试试,看提示什么?
xuzuning 2013-12-24
  • 打赏
  • 举报
回复
启动调试模式
brady_wan 2013-12-23
  • 打赏
  • 举报
回复
问题是一执行这句话,就提示
后面的根本不会显示。
码无边 2013-12-23
  • 打赏
  • 举报
回复
$article->add($data); echo $article->getLastSql(); exit; 贴出sql

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧