2012-03-09 34 views
4

我想在PHP中使用MySQLi編寫兩條準備好的語句。我是PHP和MySQLi的新手,所以我不知道是否應該關閉語句,關閉數據庫連接,將所有代碼放在函數中,或者只是讓代碼不在函數中。使用MySQLi在PHP中進行多重準備語句

基本上我只想插入一個記錄到一個表中,然後使用MySQLi將相同的記錄插入到另一個表中。

謝謝!

回答

7

直接關閉的mysqli頁:http://php.net/manual/en/mysqli.commit.php

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

/* set autocommit to off */ 
$mysqli->autocommit(FALSE); 

/* Insert some values */ 
$mysqli->query("INSERT INTO table1 VALUES ('DEU', 'Bavarian', 'F', 11.2)"); 
$mysqli->query("INSERT INTO table2 VALUES ('DEU', 'Bavarian', 'F', 11.2)"); 

/* commit transaction */ 
$mysqli->commit(); 

/* close connection */ 
$mysqli->close(); 

*編輯與 「非理智」 行動準備的語句:

<?php 
$mysqli = new mysqli("localhost", "root", "", ""); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

/* set autocommit to off */ 
$mysqli->autocommit(FALSE); 

$stmt1 = $mysqli->prepare("INSERT INTO tbl1 (id, intro) VALUES (?, ?)"); 
$stmt2 = $mysqli->prepare("INSERT INTO tbl2 (id, name) VALUES (?, ?)"); 

$str1 = 'abc'; 
$str2 = 'efg'; 
$str3 = 'hij'; 
$str4 = 'klm'; 

$stmt1->bind_param('ss', $str1, $str2); 
$stmt2->bind_param('ss', $str3,$str4); 

if ($stmt1->execute() == false) 
{ 
    echo 'First query failed: ' . $mysqli->error; 
} 
$stmt1->close(); 
if ($stmt2->execute() == false) 
{ 
    echo 'Second query failed: ' . $mysqli->error; 
} 
$stmt2->close(); 
$mysqli->close(); 
+5

我看到這裏沒有準備好的聲明 – 2012-03-09 20:23:44

+0

是啊我可以看到如何做到這一點沒有準備好的陳述,但我不知道如何處理準備好的陳述的頭頂,但無論如何感謝:) – David 2012-03-09 20:29:38

2

我是否應該關閉語句

No.

關閉數據庫連接

把所有的代碼在一個函數

最好,如果你有一個想法是什麼功能,以及如何使用他們。

順便說一句,插入兩次相同的數據是沒有意義的。你必須鏈接數據,而不是加倍。

+0

所以我執行後我準備好的第一個聲明是否可以開始準備和執行我的第二個聲明? – David 2012-03-09 20:28:11

+0

不是,我上面說過,這沒有意義。你已經插入了你的數據,不需要再次插入它 – 2012-03-09 20:29:30

+0

它不是完全相同的數據,所以我需要再次插入它 – David 2012-03-09 20:32:57