【问题标题】:Execute a query in IF statement inside FOR loop using PHPExcel使用 PHPExcel 在 FOR 循环内的 IF 语句中执行查询
【发布时间】:2019-07-12 10:30:44
【问题描述】:

我有一个关于在 IF 语句中执行查询的问题。 我将从我希望该过程如何运行开始。 最初我有一个要上传到 MYSql 数据库的 excel 文件。 使用 PHPExcel,我能够从 excel 文件中获取数据。 现在,我想做的是对于 excel 文件中的每个数据,它将与数据库中的现有数据进行比较。 如果数据匹配,则执行查询插入成功表,如果数据不匹配,则执行查询插入失败表。

这是我的代码,现在的代码只是跳过 IF 条件并执行失败条件。

$query1 = "SELECT EXISTS(SELECT 1 FROM part WHERE partno = :partno)";
$statement1 = $connect->prepare($query1);

$query2 = "INSERT INTO stock (userid, vendorid, partno, partname) 
VALUES (:userid, :vendorid, :partno, :partname)";
$statement2 = $connect->prepare($query2);

$query3 = "INSERT INTO fail (userid, vendorid, partno, partname) 
VALUES (:userid, :vendorid, :partno, :partname)";
$statement3 = $connect->prepare($query3);





foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
{
 $highestRow = $worksheet->getHighestRow();
 for($row=2; $row<=$highestRow; $row++)
 {
   $statement1->execute(
       array(
        ':partno'           =>  $worksheet->getCellByColumnAndRow(0, $row)->getValue()
       )
   );
   if ($statement1=="1"){

        $statement2->execute(
            array(
                ':userid'           =>  $_SESSION['user_id'],
                ':vendorid'         =>  $_SESSION['vendorid'],
                ':partno'           =>  $worksheet->getCellByColumnAndRow(0, $row)->getValue(),
                ':partname'         =>  $worksheet->getCellByColumnAndRow(1, $row)->getValue(),

            )
        );

    }
    else{

        $statement3->execute(
                array(
                    ':userid'           =>  $_SESSION['user_id'],
                    ':vendorid'         =>  $_SESSION['vendorid'],
                    ':partno'           =>  $worksheet->getCellByColumnAndRow(0, $row)->getValue(),
                    ':partname'         =>  $worksheet->getCellByColumnAndRow(1, $row)->getValue(),

                )
            );

        }
 }
} 

感谢任何帮助。谢谢

【问题讨论】:

  • 1. $query1 不应该是“SELECT 1 FROM part WHERE partno = :partno”吗? 2.你不应该检查$statement1是否等于1,你应该检查statement的结果(fetch)是否等于1; 3. 我会使用从 CSV 文件加载数据 infile 到临时表中(可以从 excel 中保存或使用 xls 文件中的 php 预构建),然后使用 SP 将其移动到 stock/fail 中。这会比执行多个查询快得多。

标签: php mysql pdo prepared-statement phpexcel-1.8.0


【解决方案1】:

$statement1 是一个PDOStatement 对象,因此您无法将其与"1" 进行比较。您需要做的是获取查询结果并将其与 1 进行比较。您可以使用 fetchColumn

if ($statement1->fetchColumn() == 1) {

【讨论】:

  • @NikShakirin 不用担心。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
相关资源
最近更新 更多