當前位置:首頁 » 編程語言 » thinkphp執行多條sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

thinkphp執行多條sql

發布時間: 2023-07-13 17:07:51

A. 如何在php中執行多條sql語句

這里沒有很官方的解釋,我個人認為mysql_query 不能批量執行SQL語句的原因最主要的一個就是Mysql_query不能判斷你的批量語句裡面是否包含錯誤.為了最大的保證程序的順利執行,所以,乾脆罷工了.
解決的辦法,有很多種.這里僅列出我的心得之一(利用數組用Mysql_query批量執行SQL語句)
$query = 『delete from ecs_goods_attr where attr_id=138 and goods_id=442;Insert into ecs_goods_attr (goods_attr_id,goods_id,attr_id,attr_value,attr_price)values(Null,442,138,」歐版 白色」,0);update ecs_goods set goods_number=10,shop_price=955 where goods_id=442;』
$query 是我需要執行的SQL語句,顯然這里 mysql_query($query); 是無法得到我們想要的結果的.這里我們採用一個數組.用explode 函數,將$query語句按照」;」炸開.這個說的比較形象.呵呵
$query = 『delete from ecs_goods_attr where attr_id=138 and goods_id=442;Insert into ecs_goods_attr (goods_attr_id,goods_id,attr_id,attr_value,attr_price)values(Null,442,138,」歐版 白色」,0);update ecs_goods set goods_number=10,shop_price=955 where goods_id=442;』
$query_e = explode(『;』,』$query』);
foreach ($query_e as $k =>$v)
{
mysql_query($query_e[$k]);
}
這樣 $query語句就被批量的執行了.呵呵

B. thinkphp中如何通過執行sql語句創建數據表

thinkphp中沒有自己的方法創建數據表。只能通過寫一條創建數據表的原生sql,然後M()->excute($sql);執行

C. 在ThinkPHP中怎麼執行這個SQL語句

我用的是thinkphp 3.2.3, 如果你沒用用thinkphp5.0以上的,你可以試一下M('INFORMATION_SCHEMA.TABLES')->where(array('TABLE_SCHEMA'=>'資料庫名'))->field('TABLE_NAME')->select()

D. 如何讓多個不同的SQL語句一起執行

用union
使用 UNION 運算符組合多個結果
UNION 運算符使您得以將兩個或多個 SELECT 語句的結果組合成一個結果集。使用 UNION 組合的結果集都必須具有相同的結構。而且它們的列數必須相同,並且相應的結果集列的數據類型必須兼容。有關更多信息,請參見 UNION 運算符使用指南。

UNION 的指定方式如下:

select_statement UNION [ALL] select_statement

例如,Table1 和 Table2 具有相同的兩列結構。

Table1 Table2
ColumnA ColumnB ColumnC ColumnD
char(4) int char(4) int
------- --- ------- ---
abc 1 ghi 3
def 2 jkl 4
ghi 3 mno 5

下面的查詢在這兩個表之間創建 UNION 運算:

SELECT * FROM Table1
UNION
SELECT * FROM Table2

下面是結果集:

ColumnA ColumnB
------- --------
abc 1
def 2
ghi 3
jkl 4
mno 5

E. 怎麼樣配置thinkphp 與本地mysql和sql server同時連接倆個資料庫

thinkphp 同時連接兩個資料庫的配置方法如下:
1、在Db.class.php腳本文件裡面的類增加一個魔術方法__get(),寫法如下:

publicfunction__get($propertyName)
{return$this->$propertyName;
}


這個方法是用來訪問類中protected $config成員屬性用的。有的人可能會說,直接把protected改成public豈不是更好。這樣只解決了基類的問題,假如,子類也同樣進行了受保護,那要你更改更多的文件,這是我們做IT程序員非常不願意看到的事情。
2、在Model.class.php中的getTableName()方法更改如下:

$tablepre=$this->db->config['tablepre'];
if(empty($this->trueTableName)){
$tableName??=empty($tablepre)?$this->tablePrefix:$tablepre;
if(!empty($this->tableName)){
$tableName.=$this->tableName;
}
else
{
$tableName.=parse_name($this->name);
}
$this->trueTableName??=??strtolower($tableName);
}
return(!empty($this->dbName)?$this->dbName.'.':'').$this->
trueTableName;這樣就完成了多庫自由切換時,導致的表前綴問題。
/*******************面向對象PDO連接方式*********************/
'DB_TYPE'=>'PDO',//資料庫類型
'DB_DSN'=>'mysql:host=localhost;dbname=master',//DSN連接。
'DB_USER'=>'root',//資料庫用戶名
'DB_PWD'=>'123456',//資料庫密碼
'DB_PORT'=>'3306',//資料庫埠
'DB_PREFIX'=>'g_',//數據表前綴
'DB_CHARSET'=>'utf8',//資料庫編碼默認採用utf8

F. 關於thinkPHP中 foreach 裡面執行sql語句

原生sql查詢有
query()

execute()
兩個方法:
query():用於
sql
查詢操作,並返回符合查詢條件的數據集
execute():更新和寫入數據的
sql
操作,返回影響的記錄數
public function read(){
// 實例化一個空模型,沒有對應任何數據表
$ = m();
//或者使用 $ = new model();
$list = $->query("select * from user where uid<5");
if($list){
$this->assign('list', $list );
$this->display();
} else {
$this->error($->geterror());
}
}public function read(){
header("content-type:text/html; charset=utf-8");
// 實例化一個空模型,沒有對應任何數據表
$ = m();
//或者使用 $ = new model();
$num = $->execute("update user set email = '[email protected]' where uid=3");
if($num){
echo '更新 ',$num,' 條記錄。';
}else{
echo '無記錄更新';
}
}