我试图将一个变量作为SQL语句中的字符串发送到我的DB函数,然后该函数应该将该字符串用作变量并进行处理。
它的多个插入脚本(作为数组)需要最后一个插入ID,这里是一个缩短的代码:
$insertID = "$"."insertID";
$sql = array("first INSERT Script", "INSERT into blah(`ID`, `Name`)
VALUE ('$insertID', '$name')", "Third script");
$result = dbInsert($sql);
if ($result){
// do something
}
这里是插入功能,我正在尝试这种方式是否有效:
function dbInsert($sql){
$con = dbConnect();
try {
// begin a transaction
mysqli_begin_transaction($con);
foreach ($sql as $value) {
if ($con-> query($value)) {
$insertID = $con-> insert_id;
} else {
trigger_error(mysqli_error($con));
}
}
// if no error, commit.
mysqli_commit($con);
} catch (Exception $e) {
// if any error, catch the exception and rollback
mysqli_rollback($con);
}
/* close connection and return the result */
$con->close();
return $insertID;
}
请注意,第一个脚本不需要任何最后一个插入ID,但后续脚本不需要。我知道我可以单独插入并跳过这一切,但如果我只发送一个SQL数组并且函数执行插入并发回最后一个插入ID(以验证),那将会很好。
当我回显(& die)时,函数dbInsert中的SQL语句有" $ result" ($ insertID的值),但它将其读取为字符串而不是变量,它保存最后一个插入ID。我尝试了几个组合但无济于事。
电流:
INSERT INTO `tblstudent` (`userid`, `scholarnumber`, `firstname`, `middlename`, `lastname`, `datecreated`)
VALUES ($result, '35566', 'Joe', '', 'Blog', CURRENT_TIMESTAMP);
应该是:
INSERT INTO `tblstudent` (`userid`, `scholarnumber`, `firstname`, `middlename`, `lastname`, `datecreated`)
VALUES ('418', '35566', 'Joe', '', 'Blog', CURRENT_TIMESTAMP);
我希望我有意义,有人能够指出我正确的方向。非常感谢您的时间和帮助,谢谢!
事实证明,我的方式是错误的。我需要做的就是传递" LAST_INSERT_ID()"而不是传递变量等感谢您的帮助!有人可能从中受益,因此更新帖子。
答案 0 :(得分:1)
要将字符串变量名称转换为实际变量,您需要使用eval
,并重新格式化要发送到dbInsert
的字符串。目前,您使用的是双引号,并且在发送变量之前,PHP会对这些变量进行插值。您需要将$insertID
作为文本发送,因此它应该是单引号。比较这两个:
$name = 'Percy';
$sql = array(
'INSERT into blah(`ID`, `Name`) VALUE (\'$insertID\', \'' . $name . '\')',
"INSERT into blah(`ID`, `Name`) VALUE ('$insertID', '$name')");
dbInsert($sql);
function dbInsert( $arr ){
foreach ($arr as $a) {
echo "$a\n";
}
...
输出:
INSERT into blah(`ID`, `Name`) VALUE ('$insertID', 'Percy')
INSERT into blah(`ID`, `Name`) VALUE ('', 'Percy')
所以,请使用单引号。然后,要插值,请执行以下操作:
eval("\$a = \"$a\";");
以下是一个完整的例子:
$name = 'Percy';
$sql = array(
'INSERT into blah(`ID`, `Name`) VALUE (\'$insertID\', \'' . $name . '\')',
"INSERT into blah(`ID`, `Name`) VALUE ('$insertID', '$name')"
);
dbInsert($sql);
function dbInsert( $arr ){
$insertID = '12345';
foreach ($arr as $a) {
echo "String before: $a\n";
eval("\$a = \"$a\";");
echo "String eval'd: $a\n";
}
}
输出:
String before: INSERT into blah(`ID`, `Name`) VALUE ('$insertID', 'Percy')
String eval'd: INSERT into blah(`ID`, `Name`) VALUE ('12345', 'Percy')
String before: INSERT into blah(`ID`, `Name`) VALUE ('', 'Percy')
String eval'd: INSERT into blah(`ID`, `Name`) VALUE ('', 'Percy')
在您的脚本中获得$insertID
的值后,您可以运行eval
将$insertID
转换为变量,然后对其进行插值。