首页 >后端开发 >php教程 >thinkphp无法调用add方法和save方法

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

WBOY
WBOY原创
2016-06-23 14:40:071524浏览

在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)
执行就可以插入数据。


回复讨论(解决方案)

$article->add($data);
echo $article->getLastSql();
exit;

贴出sql

问题是一执行这句话,就提示  
后面的根本不会显示。

启动调试模式

修改insert方法

public function insert() {
die("ok");
}

调用Article/insert 试试,看提示什么?

按你说的输出:ok
我的问题是这样的,它把数据传递过去了。
print_r($data);
不加$article->add($data);
一切执行正常,可以将数组中的内容输出来
我还用$article->execute($aql)
执行sql语句,可以插入到数据库,在数据库中有
数据,会不会是我的php 6.0版本的问题?和
Thinkphp有冲突。  同时感谢你们的回答

//if($data['category'] == '请选择' || $data['title']=='') {
        //$this->error('数据写入不完整,请重新输入');
// }
把上面这句话注释掉
    $result = $article->add($data);
    echo $article->getLastSql();
再试试、还有检查下,你的model,是否做了验证。


$result = $article->add($data);
或者改成
$result = $article->data($data)->add();

我的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;    }

问题是在log文件里没有找到记录,无从下手

你可以在 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指令时出现了问题

这怎么调试  ,不会呀。。。

我用别人的环境就可以执行,我的appserv有问题,还是PHP版本的问题?

我使用其他人的php5.2.8版本可以完美执行而我的php6.0则出问题。。。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn