国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

PHP執(zhí)行批量mysql語(yǔ)句的解決方法

2024-05-04 23:07:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

當(dāng)有多條mysql語(yǔ)句連起來(lái)需要執(zhí)行,比如

$sqls= “insert table a values(1,2); insert table a values(2,3);”

需要執(zhí)行的話(huà)php中可以使用的方法有三個(gè):

mysql_query

pdo

mysqli

三種方法當(dāng)sqls語(yǔ)句沒(méi)有問(wèn)題的時(shí)候都是可以的。

但是

當(dāng)sql語(yǔ)句是錯(cuò)誤的時(shí)候會(huì)出現(xiàn)問(wèn)題
第一條sql錯(cuò)誤:三個(gè)方法都返回false

第一條sql正確,第二條sql錯(cuò)誤:mysql_query、pdo、 mysqli:query也是返回true。所以這個(gè)時(shí)候你是沒(méi)法判斷你的sqls是否有那條語(yǔ)句是錯(cuò)誤的。


解決這種辦法有幾個(gè)招:

1 解析sql語(yǔ)句
將每條sql都拆分開(kāi)來(lái)執(zhí)行。這樣每個(gè)語(yǔ)句分開(kāi)執(zhí)行就解決了。但是這種方法多出了好幾種方法,所以不可取。

2 將sqls語(yǔ)句保存為文本
使用cmd執(zhí)行命令 mysql…. .< sqls.sql, 然后捕獲輸出。這也是一種方法,但是感覺(jué)是繞著問(wèn)題走,應(yīng)該還有更好的方法。

3 使用mysqli::multi_query方法
這個(gè)方法可以執(zhí)行多條sql語(yǔ)句,然后使用mysqli::next_result來(lái)設(shè)置sql的偏移量,使用mysqli::error獲取當(dāng)前偏移的sql的錯(cuò)誤狀態(tài)

下面是第三種方法的示例代碼

代碼如下:

復(fù)制代碼 代碼如下:


$sql = Config::get('sql');
$content = file_get_contents($sql);
$config = Config::get('config')
$mysqli = mysqli_connect($config['host'], $config['user'], $config['password'], $config['dbname']);
$ret = $mysqli->multi_query($content);
if($ret === false) {
echo mysqli_error($mysqli);
}
while (mysqli_more_results($mysqli)) {
if (mysqli_next_result($mysqli) === false) {
echo mysqli_error($mysqli);
echo "/r/n";
break;
}
}
$mysqli->close();


這樣的話(huà)當(dāng)sqls語(yǔ)句中任意一條有錯(cuò)誤的話(huà),程序就會(huì)跳出這個(gè)錯(cuò)誤。

如果你要編寫(xiě)初始化mysql的腳本的話(huà),這招就非常好用了。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 错那县| 醴陵市| 宿松县| 榆树市| 会泽县| 育儿| 连城县| 阿图什市| 隆安县| 满洲里市| 章丘市| 大渡口区| 泗洪县| 昭苏县| 柞水县| 健康| 长子县| 大石桥市| 临泉县| 开化县| 广河县| 胶南市| 车致| 克什克腾旗| 蒙自县| 锦州市| 永兴县| 蛟河市| 寻甸| 如东县| 乌拉特前旗| 抚远县| 梅河口市| 遂宁市| 商水县| 台东市| 宁城县| 如东县| 涿鹿县| 新乐市| 河东区|