如何将ID的最大值作为PHP变量获取,并将其插入ID也是最大值的另一个表中

时间:2019-05-13 15:50:43

标签: php sql

我有两个表RequestsAccounting_Fundscenter_Request

我正在用PHP创建可更新的SQL查询

Request_ID

Accounting_Fundscenter_Request的最大ID

Request_ID中的最大Requests


到目前为止,我已经收到max(Request_ID) rom请求,但是我不知道如何在php&sql中获取该值并更新另一个Request_ID以使其等于该值。

此外,我无法使用语法“ max(id)”,因为“ max”功能在我的第一个查询中将不起作用,我也不知道为什么。

这是我到目前为止所拥有的:

/* GET MAX ID FROM REQUESTS */
     $selectMaxID = 'SELECT Request_ID FROM Requests ORDER BY Request_ID DESC LIMIT 1';
     $maxIdResult = mysqli_query($conn, $selectMaxID); //run query



     if (mysqli_num_rows($maxIdResult) > 0) {  
        while($maxid = mysqli_fetch_assoc($maxIdResult)) {
           echo "Max Request ID: " . $maxid["Request_ID"]. "<br>";
        }   //echo result of 

      } 


     $insertFundsCenterMaxId = "INSERT INTO `Accounting_Fundscenter_Request` (

     `Request_ID`, 


     VALUES (


     $maxid["Request_ID"], 

     )


      WHERE MAX(`ID`);";


     /* RUN THE QUERY */
     $insertFundsCenterMaxId = mysqli_query($conn, $insertFundsCenterMaxId);

这不起作用。有没有办法解决这个问题,或者可以在一个查询中解决?


编辑:在您的帮助下,我找到了解决方案:

2 个答案:

答案 0 :(得分:0)

您在这里有很多选择: 您可以像这样解决查询插入中的语法错误:

$insertFundsCenterMaxIdQuery = sprintf('INSERT INTO Accounting_Fundscenter_Request (Request_ID) VALUES (%d)', $maxid["Request_ID"]);
/* RUN THE QUERY */
$insertFundsCenterMaxId = mysqli_query($conn, $insertFundsCenterMaxIdQuery);

通过这种方式,您可以使用字符串格式替换变量,而不是直接在字符串中使用$ maxid [“ Request_ID”]。 如果Request_ID应该是字符串/ varchar,请用%s替换%d。

或者您可以采用另一种方法,仅使用一个查询即可完成以下工作:

INSERT INTO Accounting_Fundscenter_Request (Request_ID) 
SELECT MAX(Request_ID) FROM Requests

然后执行此查询

答案 1 :(得分:-1)

您在更新查询中遇到语法错误:

$insertFundsCenterMaxId = "INSERT INTO `Accounting_Fundscenter_Request` (

 `Request_ID`, 

 VALUES (
  $maxid["Request_ID"], 
 )

 WHERE MAX(`ID`);";

使用隐藏在VALUES部分中的变量中的双引号,将结束insertFundsCenterMaxId中包含的字符串。其后是包含Request_ID的原始字符串,PHP无法对其进行解析。那只是无效的代码。

要解决此问题,您可以开始使用准备好的语句。它们还将帮助您保护应用程序免遭SQL注入。

还有一个单独的语法错误问题解决方案-但这会使您的应用程序容易受到攻击。这就是为什么我没有对此进行修复的原因,但是通过检查如何构建字符串,您可能会自己找到它。但是,请不要将其用于此问题。拜托。