新聞中心
thinkphp里面的add方法為什么我插入錯(cuò)誤的表字段還是可以正常添加數(shù)據(jù),錯(cuò)誤的字段為空
因?yàn)閙ysql會(huì)從你要插入的表名里面增加一條數(shù)據(jù),表名正確了,那么就會(huì)增加,而搜索到的字段就設(shè)為你設(shè)定的值,沒搜索到的字段不會(huì)左改動(dòng),一般是默認(rèn)值
成都創(chuàng)新互聯(lián)公司專注于夏河企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。夏河網(wǎng)站建設(shè)公司,為夏河等地區(qū)提供建站服務(wù)。全流程按需求定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
菜鳥問題,PHP向數(shù)據(jù)庫寫入數(shù)據(jù),顯示成功,但數(shù)據(jù)庫還是空的,怎么回事?
這是因?yàn)閷懗绦虻娜似垓_了你,他根本沒檢測(cè)是否成功,直接就告訴你成功。我們寫程序的時(shí)侯千萬別學(xué)他這樣瞞上欺下,現(xiàn)在需要修改他的下面的三行語句:
$sql="INSERT INTO test (user,title,txt) VALUES ('$_POST[user]','$_POST[title]','$_POST[txt]');";
mysql_query($sql);
echo "Success";
修改為:
$sql="INSERT INTO test (user,title,txt) VALUES ('$_POST[user]','$_POST[title]','$_POST[txt]');";
if (mysql_query($sql)) echo "Success";
else echo "插入失敗,SQL語句:$sqlbr錯(cuò)誤信息:".mysql_error();
ThinkPHP add方法 使用以后插入空數(shù)據(jù)
添加數(shù)據(jù)add方法是CURD(Create,Update,Read,Delete / 創(chuàng)建,修改,讀取,刪除)中的 Create的實(shí)現(xiàn),ThinkPHP 支持以普通數(shù)組方式和面向?qū)ο蠓绞綄?shù)據(jù)寫入數(shù)據(jù)表。
現(xiàn)在以操作 user 表數(shù)據(jù)的例子為例,來演示如何在 ThinkPHP 中實(shí)現(xiàn)對(duì)數(shù)據(jù)表的數(shù)據(jù)添加操作。
數(shù)組方式添加數(shù)據(jù)
例子: 在 IndexAction 控制器(Lib/Action/IndexAction.class.php),添加 insert()操作:
public function insert(){
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User"); // 實(shí)例化模型類
// 構(gòu)建寫入的數(shù)據(jù)數(shù)組
$data["username"] = "休假";
$data["password"] = md5("123456");
$data["email"] = "123456@163.com";
$data["regdate"] = time();
// 寫入數(shù)據(jù)
if($lastInsId = $Dao-add($data)){
echo "插入數(shù)據(jù) id 為:$lastInsId";
} else {
$this-error('數(shù)據(jù)寫入錯(cuò)誤!');
}
}
語法解讀
M("User") 用于高效實(shí)例化一個(gè)數(shù)據(jù)模型(M 是 new Model 的簡(jiǎn)寫,稱為快捷方法),參數(shù)為要操作的表名。
接下來構(gòu)建要保存數(shù)據(jù)的數(shù)組 $data 。
最后是用 add() 方法將數(shù)據(jù)寫入庫表,由于使用的是 M快捷方法,需要將 $data 數(shù)組傳入 add() 方法。
add() 方法如果添加數(shù)據(jù)記錄成功,返回的是新數(shù)據(jù)記錄主鍵,可直接得到。
該例子實(shí)際運(yùn)行的 SQL 為:
INSERT INTO user(username,password,email,regdate) VALUES ('休假','e10adc3949ba59abbe56e057f20f883e',
123456@163.com',1283612673)
對(duì)象方式添加數(shù)據(jù)
上面的方式是以構(gòu)造數(shù)據(jù)數(shù)組的方式,將數(shù)據(jù)以參數(shù)形式傳入add方法寫入數(shù)據(jù)表。ThinkPHP 也支持以對(duì)象的方式將數(shù)據(jù)寫入數(shù)據(jù)表,將上面的代碼更改為:
public function insert(){
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User"); // 實(shí)例化模型類
// 數(shù)據(jù)對(duì)象賦值
$Dao-username = "休假";
$Dao-password = md5("123456");
$Dao-email = "123456@163.com";
$Dao-regdate = time();
// 寫入數(shù)據(jù)
if($lastInsId = $Dao-add()){
echo "插入數(shù)據(jù) id 為:$lastInsId";
} else {
$this-error('數(shù)據(jù)寫入錯(cuò)誤!');
}
}
對(duì)象方式的數(shù)據(jù)以數(shù)據(jù)對(duì)象方式賦值,調(diào)用 add 方法寫入數(shù)據(jù)時(shí)不需要傳遞參數(shù)。
表單數(shù)據(jù)智能寫入create 方法
除了手動(dòng)構(gòu)造入庫的數(shù)據(jù)集之外,ThinkPHP 還提供了自動(dòng)創(chuàng)建數(shù)據(jù)對(duì)象的create() 方法。create() 方法將自動(dòng)收集提交的表單數(shù)據(jù)并創(chuàng)建數(shù)據(jù)對(duì)象而無需人工干預(yù),這在表單數(shù)據(jù)字段非常多的情況下更具優(yōu)勢(shì)。
將前文寫入表單數(shù)據(jù)的例子用 create() 來實(shí)現(xiàn):
public function insert2(){
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User");
if($Dao-create()){
$Dao-password = md5($_POST["password"]);
$Dao-regdate = time();
if($lastInsId = $Dao-add()){
echo "插入數(shù)據(jù) id 為:$lastInsId";
} else {
echo "數(shù)據(jù)寫入錯(cuò)誤!";
}
}else{
exit($Dao-getError().' [ a href="javascript:history.back()"返 回/a ]');
}
}
create() 創(chuàng)建數(shù)據(jù)對(duì)象后,將自動(dòng)收集提交過來的表單數(shù)據(jù)。而表單數(shù)據(jù)可能需要經(jīng)過一定加工(例如將密碼加密)才能寫入數(shù)據(jù)表,所以可以對(duì)數(shù)據(jù)對(duì)象的成員屬性值根據(jù)進(jìn)行修改或添加刪除等。
提示:create() 創(chuàng)建的數(shù)據(jù)對(duì)象存放于內(nèi)存,在執(zhí)行入庫動(dòng)作(add() 或 save())之前,都可以進(jìn)行修改。
在上面的例子里,create()方法 的行為和 date()方法 是一致。但 date() 方法只是簡(jiǎn)單的創(chuàng)建數(shù)據(jù)對(duì)象,但 create() 方法還具備:
令牌驗(yàn)證
數(shù)據(jù)自動(dòng)驗(yàn)證
字段映射支持
字段類型檢查
數(shù)據(jù)自動(dòng)完成
等各種高級(jí)的數(shù)據(jù)功能,要完成這些高級(jí)數(shù)據(jù)模型功能,需要使用 D方法實(shí)例化數(shù)據(jù)模型。
php插入mysql數(shù)據(jù)表顯示成功,表卻為空
你的語句還沒有執(zhí)行過。
$insert="insert into `user`(`user_name`,`password`) values('$username','$password')";這一句的后面改成這樣
$result=mysql_query($insert,$link);//執(zhí)行insert語句
//判斷執(zhí)行結(jié)果
if($result){
echo "scriptalert('注冊(cè)成功!');window.location.href='localhost/index.html';/script";
}
else{
echo "scriptalert('注冊(cè)失敗!');window.location.href='regist.php';/script";
}
為什么我的mysql數(shù)據(jù)庫表設(shè)置了不能為空,但還是能通過PHP 瀏覽器 添加數(shù)據(jù)進(jìn)去?
上午應(yīng)該是給你回答類似的問題了
1、isset只要表單有name,那肯定返回true,應(yīng)該用empty()來判斷。
2、數(shù)據(jù)庫雖然設(shè)置不能為空,但是表單提交過來的值,在插入的時(shí)候,轉(zhuǎn)換為'',即空字符串了,所以還是會(huì)插入,如果是null,就不能插入數(shù)據(jù)庫了
因此只需要把isset那里換成!empty()就可以了
新聞標(biāo)題:php插入空數(shù)據(jù)也能成功 php 獲取$_post數(shù)據(jù)為空
文章轉(zhuǎn)載:http://www.ef60e0e.cn/article/dodhesd.html