使用MySQLi在PHP中使用多个Prepared语句

时间:2012-03-09 20:16:23

标签: php mysql mysqli prepared-statement

我想做两个准备好的语句,一个在PHP中使用MySQLi一个接一个。我是PHP和MySQLi的新手所以我不知道是否应该关闭语句,关闭数据库连接,将所有代码放在函数中,或者只是让代码不在函数内部。

基本上我只是想在一个表中插入一条记录,然后使用MySQLi将同一条记录插入另一个表中。

谢谢!

2 个答案:

答案 0 :(得分:8)

直接关闭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();

答案 1 :(得分:2)

  

我是否应该关闭声明

没有

  

关闭数据库连接

没有

  

将所有代码放在函数中

最好是,如果您知道哪些功能以及如何使用它们。

BTW,两次插入相同的数据毫无意义。你必须链接数据,而不是加倍。