thinkphp无法调用add方法和save方法 $article->add($data);echo $article->getLastSql();exit;贴出sql 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 修改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则出问题 高手请进,关于discuz脱离ucenter问题 文件上传的大小到哪控制 php有没有像jsp里面的servlet处理机制?这样处理又有什么好处? 关于PHP网页地址传参数的问题,高手帮忙呀! 如何把textarea中的内容写到文本中去,保存原文的空格和回车,从文本中读出的时候显示出原文摸样? apache调试问题 对话框 如何做到象163.net发邮件时加附件一样读取客户端文件 jquery validate 表单验证 写到控件中的问题 phpstrom 用快捷键ctrl和shift和R切出来的批量替换怎么关掉 如何在function里操作pdo呀 PHP用ADO连接sql数据库
die("ok");
}调用Article/insert 试试,看提示什么?
我的问题是这样的,它把数据传递过去了。
print_r($data);
不加$article->add($data);
一切执行正常,可以将数组中的内容输出来
我还用$article->execute($aql)
执行sql语句,可以插入到数据库,在数据库中有
数据,会不会是我的php 6.0版本的问题?和
Thinkphp有冲突。 同时感谢你们的回答
//$this->error('数据写入不完整,请重新输入');
// }
把上面这句话注释掉
$result = $article->add($data);
echo $article->getLastSql();
再试试、还有检查下,你的model,是否做了验证。
$result = $article->add($data);
或者改成
$result = $article->data($data)->add();
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;
}
$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指令时出现了问题