John
Lv 4
John asked in 電腦與網際網路程式設計 · 1 decade ago

php+mysql 無法同時存入2個table

目標:此php文件欲同時寫入2個table。

已確定:我已先確定$sqlstr,$sqlstr1,$sqlstr2這3道query是正確的並在mysql執行成功。

問題所在:1.在IE6執行結果只有存入汽車配件成功,存入汽車資料失敗,且無錯誤訊息。

     2.mysql_free_result()的使用時機為何?

/**************add_car.php************/

<?

session_start();

include_once("../../sql_connect.php");

include_once("../../my_msg.php");

mysql_query('SET CHARACTER SET big5');

//抓客戶ID供存入汽車資料之用

$sqlstr = "select ID from customer where 帳號 ='".$_SESSION['account']."'";

$result = mysql_query($sqlstr,$link);

$rows = mysql_fetch_array($result);

mysql_free_result($result);

//存入汽車資料

$sqlstr1 = "insert into stock values(NULL, '".$_POST['brand']."', '".$_POST['model']."', '".$_POST['color']."', ".$_POST['door'].", ".$_POST['cc'].", '".$_POST['gear']."', ".$_POST['year'].",NULL,NULL,NULL, ".$rows['ID'].",NULL, ".$_POST['price'].", NULL, 0, NULL,0)";

$result1=mysql_query($sqlstr1,$link);

//存入汽車配件

$sqlstr2 = "insert into accessories values(NULL,'".$_POST['equip1']."', '".$_POST['equip2']."', '".$_POST['equip3']."', '".$_POST['equip4']."', '".$_POST['equip5']."', '".$_POST['equip6']."', '".$_POST['equip7']."', '".$_POST['equip8']."', '".$_POST['equip9']."', '".$_POST['equip10']."', '".$_POST['equip11']."', '".$_POST['equip12']."', '".$_POST['equip13']."', '".$_POST['equip14']."', '".$_POST['equip15']."', '".$_POST['equip16']."', '".$_POST['equip17']."')";

$result2=mysql_query($sqlstr2,$link);

mysql_close($link);

my_msg("車輛資料已存入,請過一兩天後查詢估價結果","../login/login.html");

?>

1 Answer

Rating
  • G
    Lv 5
    1 decade ago
    Favorite Answer

    把 mysql_free_result($result); 拿掉就可以了

    基本除非是取完整的資料,要不然你根本就不需要

    實際上這個 mysql_free_result function 只會增加記憶體的負擔,程式本身就會清除

    官網的說明

    http://tw.php.net/manual/en/function.mysql-free-re...

    mysql_free_result() only needs to be called if you are concerned about how much memory is being used for queries that return large result sets. 除非你要算實際記憶體用量才需到

    All associated result memory is automatically freed at the end of the script's execution. 這一段說系統會自動清

    this function may increase the memory usage if you use unbuffered querys and if you have not fetched all the data from mysql. 如果你使用未緩衝的 query 或未取得所有的資料,這 function 可能會增加你的系統記憶體的使用量

    in this case the mysql api has a problem: you want to free the result but do not want to close the connection. 事實上你只想釋放記憶體,而不想結束資料流的連結

    now mysql will only accept another query if all data has been fetched, so the api now must fetch the rest of the data when calling mysql_free_result(). 但如果你使用這個 function而又未將所有的資料取得,你將無法再取得另一個 query 的結果

    ==================

    建議把

    mysql_query($sqlstr2,$link);

    mysql_query($sqlstr2,$link) or die ("query insert 存入汽車配件" .

    "<br><br>" . $sqlstr2 . "<br><br>" . mysql_error());

    每個 query 的後會都加 or die ... 如果有問題時,你才會知道是那裏出錯,也可以直接寫一個小的 error handling class 來處理

    Source(s): 自己
Still have questions? Get your answers by asking now.