thinkphp存儲過程
A. thinkphp 往資料庫存儲的是PHP程序代碼,在讀取出來後不被解析而是直接輸出的 有什麼辦法解決嗎
你需要吧$shopcount賦值,並映射到html頁面中才可以呀
B. thinkphp 怎麼執行存儲過程怎麼獲取存儲過程返回的out參數
thinkphp;裡面支持自己寫sql的,你就想平常一樣調用你的存儲過程就行了,拋棄thinkphp的觀念,這是比較笨的方法啊!哈哈
C. php 是什麼是什麼
PHP,是英文超文本預處理語言Hypertext Preprocessor的縮寫。
一、概念。
PHP 是一種 HTML 內嵌式的語言,是一種在伺服器端執行的嵌入HTML文檔的腳本語言,語言的風格有類似於C語言,被廣泛地運用。
二、解析。
PHP 獨特的語法混合了C、java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
三、特點。
1、PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。
2、PHP安裝它可以比 CGI或者Perl更快速的執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比。
3、PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成htmL標記的CGI要高許多; PHP具有非常強大的功能,所有的CGI的功能PHP都能實現。
4、支持幾乎所有流行的資料庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展。
D. ThinkPHP中調用存儲過程失敗
首先:它得知道你將要操作的是那個庫中的表吧?
其次:你在使用mysql_query時並沒有創建數據模型。
比如:$User = new Model('User');或者用大D
然後就直接用了,它並不理解你在幹嘛。
E. thinkphp3.2 怎麼調用mysql存儲過程並返回所有結果集
$model = M("");
$sql = "call 存儲過程名稱('{$參數1}','{$參數2}',@result)";
//echo $sql;
$ref = $model -> query($sql);
//var_mp($ref);
// 結果集視具體情況而定
$status= $ref[0]['result'];
F. thinkphp怎麼加入adminer
編譯
當的大小 adminer.php然後我開始增長已經意識到是明智的分割文件管理的發展。盡管如此,我仍然想要的文件我已經創建了一個編譯腳本,連接起來的文件。
因為一切都是一個文件,管理員不能使用通常的URL alter.php?table=X和操作必須通過在查詢字元串中。而不是常見的 ?action=alter&table=X,我有更緊湊的替代使用 ?alter=X。然後一系列中央腳本 if (isset($_GET["..."]))而不是一個大 switch ($_GET["action"])。有一個包括內部的特定功能 if這些包括編譯構建過程中的一個文件:
<?php
function include_file($match) {
$file = file_get_contents($match[1]);
$token = end(token_get_all($file));
$php = (is_array($token) && in_array($token[0], array(T_CLOSE_TAG, T_INLINE_HTML)));
return "?>\n$file" . ($php ? "<?php" : "");
}
$file = preg_replace_callback('~include "([^"]+)";~', 'include_file', $file);
?>
這個代碼不是普遍可用,因為它只發現 include ""變體。它將需要處理的文件token_get_all功能和找到所有包括變體。的 _once變異將會更加困難。也可以有一個全球水平返回.
管理也使用一些外部文件——樣式表,快捷方���圖標和圖像。有幾種可能的訪問這些文件的方法:
他們可以集成在主HTML代碼——樣式表 <style>標簽,利用圖像 data:協議。這種方法的問題是,Internet Explorer 8 <不支持這個協議。第二個問題是,瀏覽器需要反復與每個頁面傳輸這些數據。
可以從外部伺服器下載的文件。會有問題,如果伺服器不可用或如果計算機的運行管理是沒有互聯網連接。然而這種方法是使用SQL查詢語法高亮顯示,這是一個可選的特性——管理使用JavaScript語法高亮顯示JUSH對於這個任務。
文件可以被集成的源代碼和一個特殊的參數將為他們服務。你有沒有注意到PHP輸出的標志嗎phpinfo嗎?PHP從本地伺服器下載它特殊的查詢字元串 ?=PHP…。管理使用類似的方法,節省了Base64編碼的文件的源代碼(編碼不是必需的,但它簡化了腳本編輯共同的文本編輯器)。這種方法允許HTTP緩存管理利用的外部文件。
注意:PHP 5.3附帶了一個支持PHP檔案通過phar擴展。這個擴展,可以裝幾個文件歸檔和從PHP訪問內部的文件歸檔。使用webPhar包裝方法允許大多數PHP應用程序創建phar歸檔和有指令phpMyAdmin的版本PHP手冊。管理不使用這個擴展和使用PHP > = 4.3和PHP > = 5.0。
縮小
編譯腳本也貶低代碼——它刪除評論和修剪空白。大衛的縮小代碼是基於工作Grudl誰使用它為他的才華橫溢的庫Texy,dibi和Nette。這個函數是比內部功能更有效php_strip_whitespace.
<?php
function php_shrink($input) {
$set = array_flip(preg_split('//', '!"#$&\'()*+,-./:;<=>?@[\]^`{|}'));
$space = '';
$output = '';
foreach (token_get_all($input) as $token) {
if (!is_array($token)) {
$token = array(0, $token);
}
if ($token[0] == T_COMMENT || $token[0] == T_WHITESPACE) {
$space = "\n";
} else {
if (isset($set[substr($output, -1)]) || isset($set[$token[1][0]])) {
$space = '';
}
$output .= $space . $token[1];
$space = '';
}
}
return $output;
}
?>
當前版本也縮短用戶變數和函數的名字。它發現的變數和函數的源代碼token_get_all功能和通過短標識符替換它們。縮短過程跳過內部PHP變數和函數。也有可能縮短他們但它會更復雜,它將有一個的性能損失。一些PHP變數有其超全局特性是必要的別名功能內的全球化。
內部函數可以包含在包絡函數較短的名字。然而這種方法是有問題的,因為PHP函數可以有可選參數沒有默認值(這個函數的例子寫入文件這檢測傳遞的參數的數量而不是它們的值)。通用函數func_get_args不使用引用相反。
替代的方法是定義一個變數為一個內部函數(例如 $fw = 'fwrite'通過這個變數)和調用的函數: $fw($fp, $string)。管理但不使用沒有方法,因為它將使應用程序慢下來。
的縮小從CSS和去掉空格也PHP版本的個貶低的JavaScript代碼。
文件會小得多的如果它被壓縮。PHP支持幾個壓縮演算法,但只有通過一個擴展。我在想用PHP編寫的一個簡單的減壓函數將解壓縮文件的其他部分,但需要eval解壓縮代碼和每個人都知道eval是惡(原因之一是不兼容PHP加速器)。因此,代碼不是壓縮但只有縮小。
翻譯
我在英語發展管理。還有一個捷克版本(這是我的母語)從一開始就和管理目前有11種語言。所有消息是由一個簡單的函數,它檢查當前的語言並返回相應的翻譯。
一個簡單的函數檢測的語言 Accept-Language標題:
<?php
function acceptable_language($translations) {
$accept_language = array();
preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$accept_language[$match[1]] = (isset($match[3]) ? $match[3] : 1);
}
arsort($accept_language);
foreach ($accept_language as $lang => $q) {
if (isset($translations[$lang])) {
return $lang;
}
$lang = preg_replace('~-.*~', '', $lang);
if (!isset($accept_language[$lang]) && isset($translations[$lang])) {
return $lang;
}
}
return false;
}
?>
這個函數的調用者保存語言一個cookie在第一次檢測。用戶可以隨時改變語言在同一頁面。保存頁面語言餅干是一個非常糟糕的實踐在一個公共網站,因為搜索引擎才能指數只有一個版本的頁面。然而在管理可接受的,因為搜索引擎不索引頁面和頁面的主要內容(例如表結構)在所有的語言都是一樣的。語言存儲在cookie的獎勵是一個簡單的URL而仍有可能執行語言通過語言標識符在查詢字元串中。
翻譯存儲在一個簡單的數組,其中的關鍵是一個消息標識符(這是一個英語版本的消息,並使用它如果翻譯不存在),該值是一個字元串翻譯。值是包含一些更有趣的信息(如「一行」或「兩行」)。大多數語言有不同的單數和復數形式,但有些語言(例如捷克語或俄語)使用更多的復數形式取決於數量(如捷克「皮沃- 1」,「2 piva」或「5 piv」啤酒)。消息和數據都存儲在一個數組,而不是字元串和管理包含一個簡單的邏輯語言選擇正確的形式取決於數量。
默認情況下,管理員有所有語言。編譯轉換翻譯數組值只和改變了標識符數字保存一些位元組每個翻譯大約需要4 KB。編譯腳本也能夠創建一個單一的語言版本,它完全消除了語言翻譯功能和檢測。這個文件只需要111 KB的英文版本管理1.10.1。
資料庫擴展抽象
PHP允許通過三個擴展:連接到一個MySQL資料庫MySQL,mysqli pdo_mysql。管理支持他們和包含這些擴展的一個簡單的抽象層。這個抽象層模擬的子集mysqli和mysqli_result類為所有三個擴展。
PDO的支持是有些微妙,因為PDO使用異常來報告連接錯誤。管理員不能用通常的 try塊來捕捉這些異常,因為它運行在PHP 4。一切都在一個文件所以PDO支持不能有條件地只包括在PHP 5。解決方案是使用set_exception_handler函數來處理連接錯誤。PHP 4還不支持類常量在語法層面上的源代碼使用數值常量代替。
安全
最重要的部分的安全管理是驚人的防禦跨站點請求偽造。CSRF攻擊者可以執行操作在一個登錄的用戶的名字。管理員登錄信息存儲在一個標準的PHP會話所以可以發送cookie會話標識符和抵禦CSRF是必要的。管理員發送一個令牌與每個形式和在執行操作前檢查這個令牌的形式。令牌保護甚至經常被遺忘的注銷動作在其他web應用程序。
非常重要的也是防止跨站點腳本。輸出的HTML代碼存儲在資料庫中可以透露敏感信息攻擊者htmlspecialchars函數每輸出函數逃。
管理也防止SQL注入,但它不是安全的名義——如果攻擊者已經登錄到管理員然後她可以執行任何SQL命令的SQL代碼頁。因此,防止SQL注入只是一個適當的操作與用戶輸入的副作用——用戶可以通過任何數據到資料庫中。如果管理檢測magic_quotes_gpc然後它中和這個指令,並使用適當的轉義函數只有當傳遞到MySQL的數據。
<?php
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
?>
調用的session_regenerate_id登錄後防止會話固定。
管理包含的每一個頁面 robots: noindex元信息隱藏頁面的搜索引擎。
登錄表單
管理資料庫證書保存到一個會話,檢查每一頁。如果資料庫不能授權用戶登錄表單是直接顯示在頁面上。這種方法是更好的然後將用戶重定向到一個登錄頁面有幾個原因:
它節省了一個請求,直接登錄表單發送到目標頁面。
用戶可以收藏任何頁面,登錄後直接顯示。重定向到一個登錄表單的方法也可以實現這一目標,但要復雜得多(登錄表單需要返回的URL,檢查它的有效性和重定向後登錄,因為 Referer頭不可靠)。
如果會話到期之前發送任何申請表然後發布數據預填充登錄表單隱藏欄位。
<?php
function hidden_fields($process) {
while (list($key, $val) = each($process)) {
if (is_array($val)) {
foreach ($val as $k => $v) {
$process[$key . "[$k]"] = $v;
}
} else {
echo '<input type="hidden" name="' . htmlspecialchars($key) . '" value="' . htmlspecialchars($val) . '" />';
}
}
}
hidden_fields($_POST);
?>
發送文件也保存到隱藏欄位和有一個小層服務的文件帶有_file美元的變數或隱藏欄位。
可以不填表單通過登錄 ?username=參數。用戶可以使用這個特性在一個安全的環境驗證由其他意思(如沒有遠程訪問localhost或HTTP身份驗證)。然而,它是不可能通過密碼在GET參數這將是非常不安全的。管理員使用的價值 mysql.default_password在這種情況下配置指令。演示應用程序使用這種方法自動登錄用戶。
表單處理
管理POST方法發送所有動作形式。如果操作成功,那麼它將瀏覽器重定向到一個頁面顯示結果的確認消息。這消息存儲到一個會話變數後開始執行行動,每個HTML頁面處理這個會話變數。有理論的可能性,其他管理頁面打開同時在不同的瀏覽器選項卡可以捕獲消息並顯示它而不是原始頁面。然而,設置消息和顯示之間的時期很短所以這個概率很低。除此之外,這個巧合的結果小,用戶會被告知結果,只是在不同的選項卡。
另一種可選擇的方法是發送消息ID或消息本身在URL中但雜亂瀏覽器歷史。此外,頁面刷新將保持消息在頁面上,這是不可取的。
如果表單操作產生的錯誤頁面直接顯示錯誤消息與腎上腺素的形式發送數據。不重定向瀏覽器的代碼在這種情況下,它允許一個用戶刷新頁面發送數據只是暫時的錯誤(例如,如果它可以固定在其他瀏覽器選項卡)。
資料庫模式
簡單的資料庫模式管理包含一個簡單的界面的可視化資料庫模式。它顯示所有表的列。顏色區分列類型和箭頭象徵著表引用。表在屏幕上用滑鼠可以移動,通過JavaScript和CSS。資料庫模式頁面使用一個cookie表放置保存。
出口
管理支持SQL和CSV進出口。最有趣的變體出口是使用ALTER命令。通常會有不同的生產和開發伺服器上的資料庫。如果你有了一些變化的資料庫結構應該在發布到生產伺服器然後刪除舊表和創建新的不是一個選擇,因為有實時數據表所示。管理員能夠生成一組改變同步資料庫的命令。它利用一個存儲過程,探討了生產資料庫並改變它符合開發版本。創建新表像往常一樣,舊表下降,缺少欄位和索引。
性能
管理總是查詢所有數據直接從資料庫只有一個例外。獲取資料庫列表可能需要很長時間如果有許多伺服器上的資料庫,即使用戶訪問只有兩個。因為每個頁面顯示資料庫列表緩存是一個會話變數中。這個變數如果刷新用戶創建或刪除一個資料庫從用戶界面或SQL命令。
關閉一個會話session_write_close是一個性能優化影響不大。默認的PHP會話處理程序鎖文件會話數據,從而防止web伺服器為多個請求相同的用戶在同一時間。這是非常重要的網站上使用框架,這是一個常見的情況。管理不使用框架,但用戶仍然可以同時打開多個瀏覽器選項卡與管理。管理員寫所有的會話數據,盡快關閉會話允許的最大並發性。
大多數用戶感受到管理的平滑,甚至一個用戶創建測試套件,衡量phpMyAdmin的性能比較:
性能相同操作的平均速度快了28%(2×23測試)。
登錄後開始快56%(2×4測試)。
最後,了解源代碼是快100%。
示範
演示是一個最好的方式來展示一些產品的特點。 我已經創建了一些樣例資料庫,使它從網站訪問通過管理但用戶已經開始腐蝕它很快。我在想定期恢復資料庫,但它不會工作,因為與此同時資料庫仍然會損壞。另一方面,在重置用戶使用資料庫將正在發生的事情感到驚訝。限制將削弱的操作演示,所以這不是一個選擇。其他可能是模擬資料庫訪問為每個用戶會話,但這將是一個非常復雜的任務,它不會出現管理的所有功能。
最後,我已經結束,為每個用戶創建一個單獨的資料庫進入演示。腳本初始化這個資料庫的示例數據後登錄注銷後的演示和破壞它。一個cron作業滴的用戶資料庫沒有注銷。演示用戶目前��強大的特權管理的特點所以有必要限制資料庫的列表不允許其他用戶訪問資料庫。每個MySQL用戶也可以修改自己的密碼和演示應用程序的用戶很快就發現了它。因此,演示也禁用這個特性。
我不想創建一個單獨的版本的管理只是為了演示我所有定製auto_prepend_file。前綴腳本限制資料庫列表,不允許改變密碼,初始化演示資料庫和滴。
測試和代碼覆蓋率
幾乎所有的應用程序測試。我已經創建了測試Selenium IDE,這是一個非常方便的Firefox插件創建復雜的web應用程序測試。硒的主要優勢是,它可以測試整個應用程序——從PHP伺服器端HTML在客戶端,它甚至可以測試JavaScript交互。管理工作沒有JavaScript但更舒適的啟用了JavaScript的一些特性,例如添加一個表中的欄位不需要將頁面發送到伺服器。
Selenium IDE可以創建測試很容易。可以把記錄按鈕,像通常在瀏覽器中工作。記錄測試之後可以修改如果你檢查的一些特性的應用程序,那麼為什麼不來記錄一個測試嗎?
我很好奇有多少代碼測試和我感興趣的是管理的哪些部分需要更徹底的測試。它可以找到的代碼覆蓋率。我已經使用了Xdebug擴展,能夠測量代碼覆蓋率。它非常適合運行單元測試,因為整個的代碼覆蓋率計算運行的測試。但web應用程序測試不同組合來自多個請求和代碼覆蓋率的計算分別為每個請求。解決方案很簡單——我已經注冊關閉功能保存代碼覆蓋一個會話和連接它與以前的結果。
管理的代碼覆蓋率是75%左右,這是令人滿意的。相比較而言,代碼覆蓋率的PHP源代碼是70%左右。我非常高興當我測試存在的重構應用程序的某些部分。我很確定重構沒有破壞任何東西當所有的測試已經通過了。
版本檢查
有一個與項目消息和電子郵件訂閱RSS提要的新版本。然而一些用戶只需安裝當前版本並���記它。出於這個原因,管理包含一個版本檢查。
版本檢查必須盡可能不引人注目的,因為有時運行管理的環境沒有互聯網連接或伺服器可能是遙不可及的。所以檢查當前版本的PHP代碼不是一個選擇,因為它是阻塞。此外,管理員可以禁用PHP的遠程連接allow_url_fopen配置指令。因此,從JavaScript版本檢查程序運行。一個簡單的 <script src>阻礙(用戶可以使用頁面但仍在載入狀態)是相同的圖片。所以一個腳本載入 onload非阻塞事件。伺服器部分非常簡單:
<?php
header("Content-Type: text/javascript");
if (version_compare($_GET["version"], $VERSION) < 0) {
echo "document.getElementById('version').innerHTML = '$VERSION';\n";
}
echo "document.cookie = 'adminer_version=$VERSION';\n";
?>
如果當前版本是老那麼腳本修改文檔來顯示新的版本號。客戶端檢查發送cookie與伺服器通信只是偶爾。
設計
設計從Vlasta紐鮑爾我不是一個藝術家所以樣式表來自自由平面設計師Ondřej Valka。設計是整個管理簡單整潔,所以我喜歡它。然而其他用戶更喜歡花哨的設計,所以他們創造了自己。設計可以很容易地集成到單個文件的編譯但用戶喜歡測試幾個設計管理檢查外部文件 adminer.css的存在。如果它確實存在,那麼該腳本使用它而不是集成的CSS。
結論
這篇文章是關於管理架構,而不是對其特性。然而,它應該明確,管理支持所有MySQL特性從一個簡單的表編輯,通過多個列外鍵、觸發器、存儲過程、出口、用戶和流程管理MySQL 5.1事件和表分區。當然是一個普遍的非標准任務的SQL命令。
phpMyAdmin的管理不僅僅是一個緊湊的版本,它試圖成為一個完全競爭選擇MySQL管理和小足跡僅僅是一個愉快的獎金。
G. thinkphp5框架擴展redis類方法示例
本文實例講述了thinkphp5框架擴展redis類方法。分享給大家供大家參考,具體如下:
筆者在開發時發現,thinkphp5的自帶redis類方法,只有簡單的讀取緩存、寫入緩存的基本方法,遠不能滿足我們業務的需求。redis本身支持五種數據類型,string(字元串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。redis的東西就不必再介紹了,接下來還是讓我一起擴展thinkphp5的redis方法吧!
首先我們先找到緩存驅動類里的,handler()方法,這個方法是返回Redis類的實例化對象的。
這就是實例化對象,包括了options配置項、handler資源句柄、tag標簽。實際上這里的handler是new
Redis()的對象實例。只要在外部拿到handler資源句柄,則可以對redis的操作進行擴展了。
在cache類里新增一個getHandler方法。
然後我們就可以在控制器調用了
列印的就是這個redis對象了
這里需要注意的是:
一個是調thinkphp5的redis的方法,就是這樣用。
一個是如果你要調用原生的redis方法
基本的用法都講完了。
接下來就愉快的開始擴展redis方法吧。
先找到這個類
這個類里並沒有list的相關操作方法,那我們就來擴展list的相關方法。
這里的話,我就舉一個例子了。
在控制器里去調用
這樣就寫入成功了。
更多關於thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend
FrameWork框架入門教程》及《PHP模板技術總結》。
希望本文所述對大家基於ThinkPHP框架的PHP程序設計有所幫助。
您可能感興趣的文章:針對thinkPHP5框架存儲過程bug重寫的存儲過程擴展類完整實例ThinkPHP行為擴展Behavior應用實例詳解ThinkPHP應用模式擴展詳解ThinkPHP框架設計及擴展詳解ThinkPHP的Widget擴展實例老生常談ThinkPHP中的行為擴展和插件(推薦)TP5(thinkPHP5)框架mongodb擴展安裝及特殊操作示例thinkPHP下的widget擴展用法實例分析thinkPHP3.2.2框架行為擴展及demo示例ThinkPHP5.0框架驗證碼功能實現方法【基於第三方擴展包】thinkphp5框架實現的自定義擴展類操作示例
H. thinkphp調用mysql存儲過程 ,求助,具體點好嗎,格式猜不出來…
thinkPHP的調用
$model = M("");
$data = $model -> query("CALL abcas(1,'[email protected]')");//調用存儲過程
mp($data);//輸出存儲過程的返回值
存儲過程部分
BEGIN -- 存儲過程開始
START TRANSACTION; -- 開始事務
#Routine body goes here...
SET @x = 1; -- 定義變數,通過這個變數判斷知道到的地方,事務成功@x返回大於0,否則返回0
update lzh_members set user_email = em where id = tid;
if row_count() > 0 then -- 判斷語句是否執行成功
update lzh_members set user_type = 0 where id = tid;
if row_count() > 0 then
update lzh_members set user_type = 2 where id = tid;
if row_count() > 0 then
SET @x = 5;
select @x;
commit; -- 事務提交
ELSE
SET @x = 0;
select @x;
rollback; -- 事務回滾
end if;
ELSE
SET @x = 0;
select @x;
rollback; -- 事務回滾
end if;
ELSE
SET @x = 0;
select @x;
rollback; -- 事務回滾
end IF;
END --存儲過程結束
I. thinkphp5.0中往表中添加多條記錄,怎麼獲取到所有添加的ID
你好,用sql語句是不可能實現的,我們可以通過事務來實現,也就是說,SqlCommand的CmdText屬性在一個方法當中可以賦多個SQL語句 SqlConnection sqlConnection = new SqlConnection(); ...初始化連接 // 開啟事務 SqlTransaction sqlTransaction = sqlConnection.BeginTransaction(); // 將事務應用於Command SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = sqlConnection; sqlCommand.Transaction = sqlTransaction; sqlCommand.CmdText=第一個sql語句 sqlCommand.ExcuteNoneQuery(); sqlCommand.CmdText=第二個sql語句 sqlCommand.ExcuteNoneQuert(); try { // 利用sqlcommand進行數據操作 ... // 成功提交 sqlTransaction.Commit(); } catch(Exception ex) { // 出錯回滾 sqlTransaction.Rollback(); } 如果在執行第二次SQL語句是出錯了,那麼就會到Catch異常中,執行回滾,那麼第一次執行的也同樣回滾了,所以必須2個都一行成功才往資料庫中提交這里是用了2次SQL語句,如果你想用1個語句同時操控2個表的話,就要用到存儲過程或者是觸發器,存儲過程和觸發器
J. ThinkPHP 3.2 版本升級了哪些內容
[新增] 增加index連貫操作方法,用於數據集的強制索引操作
[新增] Model類增加using連貫操作用於多表操作
[新增] 增加strict連貫操作,用於設置數據寫入和查詢是否嚴格檢查是否存在欄位 默認情況下 不合法數據欄位自動刪除,如果設置了嚴格檢查則會拋出異常。 例如: $model->strict(true)->add($data);
[新增] 增加fetchSql連貫操作
[新增] 添加yaml_parse_file()函數,解析yaml文件返回一個數組
[新增] 增加memcache Session驅動
[新增] 增加聚合模型,方便一對一的關聯數據表操作
[新增] 新增TMPL_PATH常量支持 可以全局改版模板目錄到模塊目錄之外
[新增] 增加Lite模式Db類,僅支持原生SQL操作
[新增] 資料庫調試增加單獨的配置參數 DB_DEBUG(如未設置依然取調試模式常量 APP_DEBUG)
[新增] 新增框架核心葡萄牙語言包
[新增] 增加COOKIE_SECURE和COOKIE_HTTPONLY配置參數
[新增] MySQL驅動增加ON DUPLICATE KEY UPDATE功能
[改進] Db類和資料庫驅動類完全基於PDO重寫
[改進] 添加全局過濾機制(默認關閉)
[改進] I函數增加修飾符功能和正則檢測支持
[改進] 採用主從分布式資料庫時,從資料庫連接失敗自動連接主伺服器
[改進] 增加Model類對復合主鍵的支持
[改進] 改進Mongo模型和驅動類,使用更加方便
[改進] 改進session函數刪除操作支持數組
[改進] 改進session函數對多維賦值的支持
[改進] 改進資料庫欄位緩存的文件標識 加上數據表前綴,避免不同前綴的表產生混淆
[改進] 針對資料庫視圖無主鍵的問題,使用默認id作為主鍵,與未開啟DB_FIELDS_CACHE時行為一致
[改進] SAE模式慣例配置增加上傳驅動設置
[改進] 改進參數綁定機制
[改進] 確保使用參數綁定後日誌中生成sql語句的准確性
[改進] 模型類的setInc和setDec方法支持延遲寫入,同時取消高級模型的相關方法
[改進] 日誌寫入的時候自動創建目錄
[改進] 改進SQL緩存
[改進] 優化緩存隊列功能
[改進] 路由的請求類型定義不區分大小寫
[改進] 資料庫驅動增加通用insertAll方法支持
[改進] 完善 url的驗證正則
[改進] 單字母函數返回值類型修正以及一些拼寫錯誤修正
[改進] 自動創建模型模塊的父目錄 直接調用\Think\Build::buildController和buildModel的情況下創建目錄
[改進] 日誌驅動增加自動目錄創建支持
[改進] 自動生成的目錄結構增加模塊的緩存目錄
[改進] mysql存儲過程支持完善
[改進] Db類改進對多表更新和刪除的支持,多表刪除支持USING和JOIN操作
[改進] 改進parseLock的位置
[改進] Db類的update和delete方法增加多表操作的支持
[改進] 改進CURD操作 可以直接返回sql語句而不真正執行。
[改進] 插件控制器的命名空間可定義 不再局限於模塊下面 增加 ADDON_PATH 用於定義插件目錄 默認位於 應用目錄下面的Addon
[改進] 改進靜態緩存讀取的有效判斷對sae的支持
[改進] 日誌目錄分模塊
[改進] 模型類的getField方法改進 支持在欄位名中使用函數
[改進] 改進Db類的parseWhere方法
[改進] 改進模型的page和limit方法 改進分頁類
[改進] 改進配置文件自動生成
[改進] 完善ShowPageTraceBehavior一處函數調用大小寫規范
[改進] U函數支持多級控制器
[改進] send_http_status函數增加狀態
[改進] 允許在項目中定義 APP 常量
[改進] 改進定義TMPL_PATH後的模板路徑定義
[改進] Image類的imagick驅動save方法增加quality參數 用於圖片質量設置,默認值為80
[改進] 改進Image類的JPEG圖片生成質量
[改進] Gd庫驅動類改進
[改進] 改進T函數對TMPL_PATH常量定義的支持
[改進] 改進I函數對path.0的支持
[改進] 改進關聯模型
[改進] 改進dispatch_jump模板
[改進] 更新api模式支持配置文件的後綴定義
[改進] 改進Model類的getModelName方法對多層模型的支持
[改進] 改進cookie函數對secure和httponly的支持
[改進] 改進模板標簽對命名空間的支持,寫法 {$var|Org\Util\String::rand}
[改進] 改進數據表自動識別規則正則規則 可以正確識別帶有數字的數據表
[改進] Model類的cache方法使用改進 cache(10) 等同於 cache(true, 10)
[修正] 修正ShowRuntime行為擴展
[修正] 修正Model類的add和addall方法中的_facade和_parseOptions的調用順序問題
[修正] 修正使用數組方式動態指定表名後的BUG
[修正] 修正ChromShowPage行為擴展
[修正] 修正自定義公共模塊路徑時,載入公共模塊類庫失敗
[修正] 修正參數綁定的一處判斷
[修正] 解決PDO參數綁定後的獲取最終SQL語句問題
[修正] 修正開啟布局後show方法的問題
[修正] 解決調用trace()無法返回trace日誌問題
[修正] 修復mongo出現錯誤輸出的問題
[修正] 修正頁面Trace的日誌保存
[修正] 修正Model類的save方法
[修正] 修正令牌驗證沒有設置TOKEN_NAME的問題
[修正] 修復RestController中請求資源類型總是為html的bug
[修正] 修正Model類的getField方法的一處變數沖突問題
[修正] 修正Mongo驅動的page處理
[修正] 修正 extract方法 在分解變數的時候 可能導致變數被覆蓋的問題
[修正] 修正Imagick類庫
[修正] 修正頁面trace插件開啟PAGE_TRACE_SAVE後出錯的問題
[修正] 修正controller方法 對不使用命名空間的支持
[修正] 修正Image類的save方法支持圖片質量
[修正] 修正高級模型的樂觀鎖功能
[修正] 修正I函數通過FILTER_VALIDATE_EMAIL方式傳入常量過濾的一處錯誤 並且過濾參數支持數組
[修正] 修正GIF類的架構函數
[修正] Cache類一處常量錯誤修正
[修正] 修改自動生成的配置文件支持CONF_EXT定義
[刪除] 去掉多餘的URL_404_REDIRECT配置參數
3.2.2 更新日誌
[增加]配置文件增加yaml/json/xml/ini/自定義格式支持
[增加]增加load_config函數用於載入配置文件
[增加]增加CONF_EXT和CONF_PARSE常量,用於定義配置文件後綴及解析方法
[增加]模塊增加狀態配置文件
[增加]cookie函數增加httponly參數支持
[增加]增加COOKIE_HTTPONLY配置參數
[增加]增加插件的控制器訪問支持
[增加]增加CONTROLLER_PATH常量用於定義控制器的命名空間路徑
[增加]添加VAR_ADDON配置參數 用於設置默認的插件控制器命名空間變數
[增加]dispatcher類增加getSpace方法用於獲取控制器的命名空間路徑
[增加]I函數增加path和data類型變數的用法
[增加]引入composer支持(還需要完善)
[增加]xcahe和wincache驅動增加clear方法
[增加]自動生成機制支持多個模塊的控制器和模型類的批量生成
[修正]修正上傳類不能動態改變rootPath的BUG
[修正]修正RestController類的執行順序
[修正]修正Model類的參數綁定的一處BUG
[修正]修正CronRun行為擴展一處錯誤
[修正]修正GIF類
[修正]修正rest控制器的encodeData方法
[修正]修正ViewModel可能因空格導致Order方法錯誤的bug
[修正]修正MongoModel類的寫入數據的自增獲取
[修正]修正第三方模板引擎驅動類
[修正]修正自動載入可能的一處導致重復載入的問題
[修正]修正__CONTROLLER__ 在URL不區分大小寫情況下的獲取
[修正]修正Route類中請求類型判斷錯誤的bug
[修正]修正mysqli驅動的free方法
[改進]改進CronRun行為擴展
[改進]TOKEN_NAME 未設置時使用默認值__hash__
[改進]模類的_after_insert回調返回false後直接返回
[改進]Model類的save方法 如果data為空則不執行
[改進]Model類的delete方法 如果條件為空 則不執行刪除操作
[改進]改進獲取模塊方法,支持駝峰法模塊命名
[改進]改進模型的查詢方法對表前綴的支持,使用當前模型設置的表前綴
[改進]視圖模型的視圖定義中的_table屬性和關聯模型中的relation_table 支持 __TABLE_NAME__定義方式
[改進]Model類的query和execute方法支持 __TABLE_NAME__定義方式
[改進]改進PDO驅動對pgsql字元轉義的支持
[改進]改進Cookie函數對名稱中包含「.」的支持
[改進]改進Sae上傳驅動 增加file['url']信息存儲
[改進]Page類添加默認的listRows值
[改進]改進IS_CGI常量的判斷,支持fcgi
[改進]改進Db類的multiConnect方法 避免切換資料庫的時候 配置數據被緩存
[改進]改進Db類對傳入的參數 如果未設置數據編碼,設置默認的編碼為utf8
[改進]改進B方法支持對行為和擴展類的調用,需要傳入完整的類名
[改進]改進驗證碼類 添加驗證成功後是否重置session的參數 reset 默認為true
[改進]改進session和cookie函數,支持獲取全部
[改進]調試模式下,錯誤的查詢條件和非法數據寫入會拋異常
[改進]改進Model類的getField方法
[調整]設置VIEW_PATH後參數後無需再定義模塊子目錄
[調整]為了避免和函數規則沖突,規則路由排除分隔符改為「-」
3.2.1 更新日誌
[增加] 增加Rpc控制器支持
[增加] 添加原來的部分擴展類庫
[增加] 增加RestController
[增加] 添加Boris行為擴展
[增加] 增加Boris第三方類庫
[增加] 增加BIND_MODULE BIND_CONTROLLER BIND_ACTION 常量定義 用於在入口文件中綁定
[增加] 增加 mole_check 標簽位
[增加] 增加buildLite行為 用於根據當前環境生成運行時lite文件 可以替換框架入口文件運行,提高效率
[增加] Think類增加getMap方法
[增加] C函數增加默認值功能 可以是獲取配置參數的時候,當沒有定義的時候獲取傳入的默認值
[增加] 增加Yar擴展支持
[增加] 添加jsonRPC擴展
[增加] 增加Api應用模式擴展和Mode擴展目錄
[增加] 添加第三方模板引擎
[增加] 支持操作方法綁定到類
[增加] 增加Think\Auth類
[增加] 增加Hprose控制器和第三方類庫包
[增加] 增加CONF_PATH常量定義
[增加] 應用和模塊增加自動讀取當前應用模式配置文件的功能
[修正] 修正正則路由的一個函數處理的bug
[修正] 修正模板引擎類的一處bug
[修正] 修正L函數的一處錯誤
[修正] 修正驅動類一處錯誤
[修正] 修正MongoModel一處錯誤
[修正] 修正Verify類對多個驗證碼同一個頁面顯示的bug
[修正] 修正找不到Log類的錯誤
[修正] 修正模型類的一處bug
[修正] 修正session函數一處警告錯誤
[修正] 修正U函數的一處警告錯誤
[修正] 修正compile函數的一處bug
[修正] 修正驗證碼的背景圖片功能
[修正] Think\Image類常量修正
[修正] 修正Image類的架構方法錯誤
[修正] 修正Mongodb資料庫驅動
[修正] 修正trace方法在CLI下面中文輸出亂碼
[修正] 修正控制器類當調用不存在的方法的報錯
[改進] 改進操作方法的名稱識別
[改進] 改進資料庫驅動 支持不同的鏈接指定不同的charset參數
[改進] 改進get_client_ip函數
[改進] 改進L函數支持傳入變數
[改進] 改進PDO驅動 當版本低於PHP5.3.6的時候禁用模擬預處理語句
[改進] 調整dispatcher類的模塊、控制器和操作名獲取方法
[改進] 頁面trace擴展CLI下面不執行
[改進] 優化trace方法
[改進] 解決因配置文件載入順序錯誤導致在SAE環境中運行出錯的問題
[改進] 改進Storage類
[改進] 優化load_ext_file函數
[改進] Behavior類簡化(下一版本可能會廢棄)
[改進] 核心行為類簡化取消對Behavior的繼承
[改進] C函數並入系統函數庫文件
[改進] union連貫操作方法 字元串用法支持 TABLE_NAME 方式替換
[改進] 改進Jion和table連貫操作方法,當使用TABLE_NAME解析的時候支持動態指定的表前綴
[改進] 優化U函數
[改進] 路由類改進
[改進] 改進路由的閉包支持 閉包函數如果返回布爾值 則繼續執行後續 否則中止執行
[改進] 應用模式定義文件移動到MODE_PATH目錄下面 便於管理
[改進] 默認URL不區分大小寫
[改進] 改進路由閉包定義
[改進] 改進路由的額外參數傳入
[改進] 重寫查詢緩存功能
[改進] 關聯模型修改
[改進] Image類水印生成支持透明度參數
[改進] 改進Image驅動
[改進] 驗證碼類改進
[改進] 改進上傳類及驅動
[改進] session驅動類介面改進 無需定義execute方法
[改進] 靜態緩存僅在get請求下生效
[改進] 改進靜態緩存行為
[改進] 語言文件更新
[改進] Storage類的SAE驅動更新
[改進] 英文語言包修正
[改進] 改進PDO驅動
[改進] 默認生成的測試控制器規范改進
[刪除] 廢除APP_FILE_CASE參數配置 改為Windows下調試模式自動開啟區分大小寫