Php 如何使用嵌套的SELECT获取INSERT查询的插入行计数?受影响的\u行、结果\u id、数量\u行没有运气

Php 如何使用嵌套的SELECT获取INSERT查询的插入行计数?受影响的\u行、结果\u id、数量\u行没有运气,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,包含SELECT in值的INSERT语句: $stmt = $db->prepare("INSERT INTO weld_reference(weld_id,report_id) VALUES ((SELECT w.id FROM welds w WHERE w.weld_number=?),?)") 下面的代码在用户提交的字符串数组($welds)中循环,并尝试将其ID插入表weld\u reference中(如果它存在于表welds中) $stmt-&g

包含SELECT in值的INSERT语句:

$stmt = $db->prepare("INSERT INTO weld_reference(weld_id,report_id) VALUES ((SELECT w.id FROM welds w WHERE w.weld_number=?),?)")
下面的代码在用户提交的字符串数组($welds)中循环,并尝试将其ID插入表
weld\u reference
中(如果它存在于表
welds
中)

    $stmt->bind_param("si",$weld_number,$_POST['report_id']);
    foreach($welds as $weld_number){
        if($stmt->execute() and $stmt->num_rows){
            ++$insert_count;
        }
    }   
我不想再进行另一次查询以查看行是否存在,我希望可以在每次$stmt->execute()之后获得行数或插入成功率

但是,
$stmt->infected_rows
,以及
$stmt->insert_id
始终返回1和 无论是否插入行,
$stmt->num_rows
始终返回
0


我如何读取该信息并查看是否插入了一行以向用户发送准确的反馈消息?

如何检查
$stmt->insert_id
的值?因为它应该返回“获取上一次插入操作生成的ID”。如果ou仅($evaluate),它将返回true(如1)

我这样做的方式是我将id存储在一个数组中,这样我就可以有一个插入内容的好列表

$stmt->bind_param("si",$weld_number,$_POST['report_id']);
    foreach($welds as $weld_number){
        if($stmt->execute()){
          $insertedId[]=$stmt->insert_id;
        }
    } 
echo count($insertedId);
或者,由于id在逻辑上永远不会为空,您可以这样做

$stmt->bind_param("si",$weld_number,$_POST['report_id']);
    foreach($welds as $weld_number){
        if($stmt->execute() && !empty($stmt->insert_id)){
            $insert_count++;
           // ++$insert_count; //unaware of this syntax -.-
        }
    } 

这起作用了,我还必须将我的查询更改为
插入nde_报告_焊接_参考(焊接参考id,nde_报告参考id,通过布尔)选择w.id,?,?从焊缝w开始,其中w.焊缝编号=?
。很明显,这是一直插入带有空值的行。我没有意识到应用程序忽略了这些行。另外,我认为+++$非常有效,感谢链接,我不习惯看到这种语法。就像
和&
一样。很高兴它成功了,希望你学到了一些东西:D