❶ 上傳文件時出現http error 500錯誤
首先,上傳大小的限制有兩個,一個叫post_max_size,一個叫upload_max_filesize。
然後,你看它提示的是HTTP Error 500。
五百錯誤的原因比較多,但一般來說,都是伺服器代碼的錯誤而導致其內部錯誤的。
那麼據此推想,可能的原因有下:
沒有配置允許上傳文件;
沒有配置上傳文件的臨時目錄;
臨時目錄或上傳目錄路徑有系統不能識別的字元(如漢字等);
臨時目錄或上傳目標無寫入許可權;
上傳文件有系統不能識別的字元(如漢字等);
本地上傳文件的目錄路徑有系統不能識別的字元;
……
目前只能想到這些了,不過你可以直接找到上傳文件的那一段代碼,逐行寫上測試錯誤的代碼,就可以找到哪裡出錯了,進而找到根本原因。
❷ thinkphp怎麼獲取添加的sql語句信息
thinkphp中的add方法獲取sql錯誤消息可以調用getDbError()函數。
getDbError函數可以獲取資料庫的錯誤信息。
function GetRandomAd()
{
global $myDB;
$today = date('j');
$ql = "SELECT * FROM reklama WHERE today<>'$today' OR realimpr<impr OR impr=0 ORDER BY RAND() LIMIT 1";
$result = $myDB->Execute($ql) or die(GetDbError($myDB->ErrorMsg()));
$r_id = $result->Fields("aid");
$r_ad_text = $result->Fields("ad_text");
$r_today = $result->Fields("today");
$result->Close();
if ($r_id)
{
if ($today != $r_today) $ql = "UPDATE reklama SET realimpr=1, today='$today' WHERE aid='$r_id'";
else $ql = "UPDATE reklama SET realimpr=realimpr+1 WHERE aid='$r_id'";
$result = $myDB->Execute($ql) or die(GetDbError($myDB->ErrorMsg()));
$result->Close();
}
return $r_ad_text;
}
public function read(){
// 實例化一個空模型,沒有對應任何數據表
$Dao = M();
//或者使用 $Dao = new Model();
$list = $Dao->query("select * from user where uid<5");
if($list){
$this->assign('list', $list );
$this->display();
} else {
$this->error($Dao->getError());
}
}
public function read(){
header("Content-Type:text/html; charset=utf-8");
// 實例化一個空模型,沒有對應任何數據表
$Dao = M();
//或者使用 $Dao = new Model();
$num = $Dao->execute("update user set email = '[email protected]' where uid=3");
if($num){
echo '更新 ',$num,' 條記錄。';
}else{
echo '無記錄更新';
}
}
public function read(){
$Dao = M("User");
$list = $Dao->query("select __TABLE__ from user where uid<5");
}
原生SQL查詢
盡管ThinkPHP內置了大量的數據操作方法,但ThinkPHP仍保留了對原生SQL查詢的支持,以便滿足復雜查詢的需要和一些特殊的數據操作。
SQL查詢的返回值是直接返回DB類的查詢結果,沒有做任何的處理,而且可以支持查詢緩存。
原生SQL查詢有 query() 和 execute() 兩個方法:
query():用於 SQL 查詢操作,並返回符合查詢條件的數據集
execute():更新和寫入數據的 SQL 操作,返回影響的記錄數
query()
query() 方法是用於 SQL 查詢操作,和select()方法一樣返回符合查詢條件的數據集。
例子:
對於 query() 方法返回的數據集,跟 select() 一樣,可以在模板里直接循環輸出。
execute()
execute() 方法用於更新和寫入數據的 SQL 操作(註:非查詢操作,無返回數據集),返回影響的記錄數。
例子:
如果查詢比較復雜或一些特殊的數據操作不能通過 ThinkPHP 內置的 ORM 和 ActiveRecord 模式實現時,就可以通過直接使用原生 SQL 查詢來實現。
注意:以上都是 user 沒有表前綴的例子,在查詢語句中,查詢的表應該寫實際的表名字(包括前綴)。
小技巧
原生 SQL 查詢需要在查詢語句中寫上對應的表名,如果表名有改動的時候,就需要逐行去更改 SQL 語句中的表名字,這樣不免麻煩。ThinkPHP 提供了一個小技巧來幫助解決這個問題。
在 SQL 語句中,以 __TABLE__ 來替代真實的表名,而在實例化模型時,仍以表名為參數,如:
系統在解析的時候會自動替換成當前模型對應的表名,這樣就可以做到即使表名有所變化,只需修改實例化對應的表名即可而不用修改原生的 SQL 語句。