[英]How to use SET and INSERT in one php variable?
这不是重复的问题,因为我要问如何在一个PHP变量中使用SET和INSERT,所以对AUTO_INCREMENT没有任何疑问...
我有以下页面:
<?php
function genWO(){
$dbtype = "MySQL";
$username = "user";
$password = "pass";
$hostname = "10.10.10.10";
$dbname = "TABLES";
//connection to the database
$conn = new mysqli($hostname, $username, $password);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$insertNewWONum = "SET @MAX_WO = (SELECT max(WO_NUM) + 1 from GENERIC_TABLES.WO_NUMBERS); INSERT INTO GENERIC_TABLES.WO_NUMBERS (WO_NUM, WO_REQUESTOR) values (@MAX_WO, `test`)";
if ($conn->query($insertNewWONum) === TRUE) {
echo "New record created successfully". "<br>";
} else {
echo "Error: " . $insertNewWONum . "<br>" . $conn->error;
}
$getWONum = "SELECT LPAD(max(WO_NUM) ,6,0) as NEW_WO_NUM from GENERIC_TABLES.WO_NUMBERS";
$result = $conn->query($getWONum);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "New WO Number: " . $row["NEW_WO_NUM"]. "<br>";
}
} else {
echo "0 results";
}
//close the connection
$conn->close();
}
?>
由于不允许在一个查询中对同一张表使用INSERT和SELECT,因此我试图设置变量并在INSERT查询中使用它:
$insertNewWONum = "SET @MAX_WO = (SELECT max(WO_NUM) + 1 from GENERIC_TABLES.WO_NUMBERS); INSERT INTO GENERIC_TABLES.WO_NUMBERS (WO_NUM, WO_REQUESTOR) values (@MAX_WO, `test`)";
但是它不起作用,尽管如果我在终端中使用此查询也可以正常工作。
谁能让我知道如何实现它?
由于不允许在一个查询中对同一张表使用INSERT和SELECT
除了方法的所有问题,您当然可以在一条语句中使用INSERT
和SELECT
INSERT INTO WO_NUMBERS (WO_NUM, WO_REQUESTOR)
SELECT COALESCE(MAX(WO_NUM), 0) + 1, 'Test'
FROM WO_NUMBERS;
这是SQLFiddle演示。
现在您需要意识到的是,您的方法对于并发访问是不安全的 。 如果同时从两个或多个会话中执行此代码,则部分或全部会话可能会生成相同的数字,从而有效地破坏了您的应用程序。
请改用AUTO_INCREMENT
。
CREATE TABLE WO_NUMBERS
(
WO_NUM INT PRIMARY KEY AUTO_INCREMENT,
WO_REQUESTOR VARCHAR(32)
);
INSERT INTO WO_NUMBERS (WO_REQUESTOR) VALUES ('Test');
这是SQLFiddle演示。
如果由于某种原因您不能直接使用AUTO_INCREMENT
(老实说,我不明白为什么不能这样做),即您需要以某种方式添加前缀或扩展生成的ID /代码,则可以查看此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.