【问题标题】:Changing a value of a variable inside foreach loop PHP在foreach循环PHP中更改变量的值
【发布时间】:2013-09-19 15:08:47
【问题描述】:

我有问题。我应该在 php 的 foreach 循环中更改变量的值,但该值始终保持预定义的值。代码如下:

$returnValue = "";
foreach($vinArray as $vinValue){
    $sql_vin_check = "SELECT * FROM users WHERE vin LIKE '%:vin%'";
    $stmtvincheck  = $pdo->prepare($sql_vin_check);
    $stmtvincheck->bindParam(':vin', $vinValue);
    $stmtvincheck->execute();
    $vinCheck = $stmtvincheck->rowCount();
    $stmtvincheck->closeCursor();
    echo $vinValue;
    if($vinCheck != 0){
        $returnValue = $vinValue; break;
    }
}
return $returnValue;

$returnValue 持有"" 值。我尝试回显$vinValue 变量,循环中断时它不为空。

我做错了什么?

【问题讨论】:

  • $vinCheck != 0,因为你只设置$returnValue 如果它不等于0。尝试将你的回显更改为echo "vinValue: $vinValue vinCheck: $vinCheck";
  • 您应该将准备好的语句(和参数绑定)从循环中取出。这就是准备好的语句的用途。
  • 这是针对什么数据库的?因为手册指出“某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都可以保证这种行为,并且不应依赖于可移植应用程序。”
  • 并且始终进行> 0 检查而不是!= 0。有时结果是-1 错误!
  • 我认为您需要将通配符添加到您要绑定的变量中,而不是在准备好的语句中的占位符周围。所以 LIKE :vin 和 bindParam(':vin', '%'.$vinValue.'%')。

标签: php variables loops foreach


【解决方案1】:

试试这个:

$returnValue = "";
foreach($vinArray as $k=>$vinValue){
    $sql_vin_check = "SELECT count(*) c FROM users WHERE vin LIKE '%:vin%'";
    $stmtvincheck  = $pdo->prepare($sql_vin_check);
    $stmtvincheck->bindParam(':vin', $vinValue);
    $stmtvincheck->execute();
    $vinCheck = $stmtvincheck->fetch();
    $stmtvincheck->closeCursor();
    if($vinCheck['c'] > 0){
        $returnValue = $vinValue; 
        break;
    }
}
return $returnValue;

如果没有其他预期,我还建议您将 returnvalue/break 替换为从那里直接返回(此建议与您的问题无关)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多