2017-10-13 122 views
0

請在這裏有一個小問題。我寫的下面的代碼是爲了同時插入兩個表,但它不工作。但如果我刪除第二個插入第一個插入將工作不知道什麼是錯的。 IT意味着插入到第一個表中,並將第一個表的最後一個插入標識收集到第二個表中。我做了什麼錯插入兩張表同時共享同一個ID

<?php 
    $english_name = $_POST['EnglishName']; 
    $tel_number = $_POST['TelNumber']; 
    $email_address = $_POST['EmailAddress']; 
    $gender = $_POST['Gender']; 
    $age = $_POST['Age']; 
    $region = $_POST['Region']; 

    mysql_connect("localhost", "root", "") or die ('Error: ' . mysql_error()); 
    mysql_select_db("fruitmarket"); 

    $query="INSERT INTO data (english_name, tel_number, email_address, gender,   age, region) VALUES ("; 
    $query.="'".$english_name."', "; 
    $query.="'".$tel_number."', "; 
    $query.="'".$email_address."', "; 
    $query.="'".$gender."', "; 
    $query.="'".$age."', "; 
    $query.="'".$region."')"; 

    $query .= "INSERT INTO data_category (id, english_name) 
VALUES (LAST_INSERT_ID(), '$english_name');"; 


    mysql_query($query) or die ('Error updating database'); 

    echo "Record is inserted."; 
?> 
+0

它不會因爲工作在連接'$ query'中的另一個查詢之後,它變成了一個無效查詢,從[這裏]讀取更多內容(https://stackoverflow.com/questions/1988921/how-can-i-put-two-queries-in-one -mysql查詢)。並考慮更改爲mysqli或PDO,因爲mysql已被棄用 – Swellar

+0

那麼你能幫我把它改成Mysqli嗎?我真的不明白PDO –

+0

對不起,但你需要了解你自己的,SO不是代碼寫作服務 – Swellar

回答

1

它幾乎是2018年,所以,請停止使用貶值,除去mysql_*函數使用PDO/mysqli的預處理語句。

預處理語句我已經重新編寫代碼,請按以下鏈接:

Why shouldn't I use mysql_* functions in PHP?

How can I prevent SQL injection in PHP?

Prepared statements

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = ""; 
$dbname  = "fruitmarket"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$stmt = "INSERT INTO data (english_name,tel_number,email_address,gender,age,region) VALUES(?,?,?,?,?,?)"; 

$sql = $conn->prepare($stmt); 
$sql->bind_param("ssssis", $english_name, $tel_number, $email_address, $gender, $age, $region); 

if ($sql->execute()) { 

    $id = $sql->insert_id; 

    $insert = $conn->prepare("INSERT INTO data_category (id, english_name) VALUES(?,?)"); 
    $insert->bind_param("is", $id, $english_name); 

    if ($insert->execute()) { 

     echo "data inserted successfully"; 
    } else { 

     printf("Errormessage: %s\n", $mysqli->error); 
    } 
} else { 

    printf("Errormessage: %s\n", $mysqli->error); 
} 

已準備語句是用功能以高效率重複執行相同(或類似)的SQL語句。

預處理語句的基本工作原理是這樣的:

  • 準備:一個SQL語句的模板創建併發送至 數據庫。某些值未指定,稱爲參數 (標記爲「?」)。例如:INSERT INTO myTabvle VALUES
  • 數據庫分析,編譯和執行 查詢優化SQL語句模板,並將結果而不執行 它
  • 執行(?,?,?):在以後的時間,應用程序將這些值綁定到 參數,並且數據庫執行該語句。該應用程序 ,因爲它相比於直接執行SQL語句的不同 值要可以執行該語句多次,準備 報表主要有三個優點:
  • 預處理語句大大減少了分析時間上 查詢的準備只是做一次(雖然語句執行多個 倍)
  • 綁定參數減少帶寬的服務器,因爲你需要發送 只是每次的參數,而不是整個查詢
  • 預處理語句是對SQL注入是非常有用的,因爲 參數之後使用不同的 協議傳輸的ter值不需要正確轉義。如果原始語句 模板不是從外部輸入派生的,則SQL注入不能發生 。
+0

錯誤 注意:Undefined variable:mysqli在第35行的C:\ xampp \ htdocs \ markeet \ olx \ test \ update2.php中注意:嘗試獲取C:\ xampp \ htdocs \ markeet \ olx \ test \ update2.php中非對象的屬性line 35 Errormessage: –

+0

@EdwardWalker plz po st你的最新代碼 –

+0

我正在使用的代碼是上面的 –

1

我測試了上面的代碼,發現你只需要只是添加和修改一些代碼看看我下面的例子

<?php 
    $english_name = $_POST['EnglishName']; 
    $tel_number = $_POST['TelNumber']; 
    $email_address = $_POST['EmailAddress']; 
    $gender = $_POST['Gender']; 
    $age = $_POST['Age']; 
    $region = $_POST['Region']; 

    mysql_connect("localhost", "root", "") or die ('Error: ' . mysql_error()); 
    mysql_select_db("fruitmarket"); 

    $query="INSERT INTO data (english_name, tel_number, email_address, gender, age, region) VALUES ("; 
    $query.="'".$english_name."', "; 
    $query.="'".$tel_number."', "; 
    $query.="'".$email_address."', "; 
    $query.="'".$gender."', "; 
    $query.="'".$age."', "; 
    $query.="'".$region."')"; 

    mysql_query($query) or die ('Error updating database'); 

    echo "Record is inserted."; 

    $query= "INSERT INTO data_category (id, english_name) 
VALUES (LAST_INSERT_ID(), '$english_name');"; 

mysql_query($query) or die ('Error updating database'); 

    echo "Record is inserted."; 
?> 

測試,以檢查其能否正常工作

+0

讓我測試它希望它能工作 –