標籤:

為什麼 INSERT INTO MYSQL 資料庫失敗?

當我用

$sql = "INSERT INTO MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE) VALUES(13044064,5,6,5,2600,20130227);";

然後運行

mysql_query($sql);

時能夠成功插入資料庫,但是當我插入多條記錄:

$sql = "INSERT INTO MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE)
VALUES(13044064,5,6,5,2600,20130227); INSERT INTO
MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE)
VALUES(1425578,8,6,5,2500,20130227); INSERT INTO
MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE)
VALUES(18705325,1,3,3,801,20130227);";

然後運行mysql_query($sql);

卻失敗,請問為啥啊?


輸出mysql_error();看看。

好像php為了系統安全,不能一次執行多條sql語句。

你換成

$sql = "INSERT INTO MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE)
VALUES
(13044064,5,6,5,2600,20130227),
(1425578,8,6,5,2500,20130227),
(18705325,1,3,3,801,20130227)";
看看


回答:
第一,mysql_query函數不允許一次執行多條SQL語句的,還有一個函數好像是 mysql_query_multi (),你查找下函數庫或手冊;

第二,從你提供的SQL語句看,為了執行性能的高效,寫成:
INSERT INTO MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE)
VALUES(13044064,5,6,5,2600,20130227),(1425578,8,6,5,2500,20130227)....;


手冊。

mysql_query

(PHP 4, PHP 5)

mysql_query — 發送一條 MySQL 查詢

說明


resource mysql_query
( string $query
[, resource $link_identifier
] )

mysql_query()
向與指定的連接標識符關聯的伺服器中的當前活動資料庫發送一條查詢。如果沒有指定
link_identifier,則使用上一個打開的連接。如果沒有打開的連接,本函數會嘗試無參數調用
mysql_connect()
函數來建立一個連接並使用之。查詢結果會被緩存。

Note:


查詢字元串不應以分號結束。

不支持多條語句一起查詢。


mysql_query有點過時了,你可以用mysqli,mysqli的multi_query方法可以執行多條sql語句

$sqls =INSERT INTO MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE) VALUES(13044064,5,6,5,2600,20130227); INSERT INTO MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE) VALUES(1425578,8,6,5,2500,20130227); INSERT INTO MSG_TEST(HOUSE_ID,HOUSE_TYPE,PV,UV,CITY_ID,DATELINE) VALUES(18705325,1,3,3,801,20130227);
$mysqli = mysqli_connect("localhose", "yourname", "yourpassword", "yourdb");
$query = $mysqli-&>multi_query($sqls);
if($query === false) {
echo mysqli_error($mysqli);
}
while (mysqli_more_results($mysqli)) {
if (mysqli_next_result($mysqli) === false) {
echo mysqli_error($mysqli);
echo "
"
;
break;
}
}
$mysqli-&>close();

multi_query可以執行不同的多條sql語句,不一定要像上面的都是插入同體張表的語句。

也可是

$sql="insert into users(name,password) values(myname,mypassword); select * from users; "等


你確信你寫的insert是對的?回去翻翻手冊吧。


推薦閱讀:

mysql是如何工作的?
mysql 每次查詢一條數據查10次 和一次查詢10條數據效率有多少差距?
mysql的MEMORY引擎為什麼應用沒有redis的應用廣泛?

TAG:PHP | MySQL |