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 '无记录更新';
}
}