WordPress:$ wpdb-> get_results();第一个循环后返回错误的结果

时间:2017-12-29 13:05:10

标签: php mysql wordpress gravity-forms-plugin

我目前正在使用Wordpress的插件(最新版本)。 现在一切都很顺利,除了这一件事,当挂钩到GravityForms时。

这是我的代码:

function DbUpdateServices($services){
$choices = $services->choices;
print_r($choices);
global $wpdb;
$allValues = array();
foreach($choices as $choice){
$text = $choice["text"];
$value = $choice["value"];
$allValues[] = $value;
$name_exists = $wpdb->get_results("SELECT * FROM quotation_diensten WHERE dienstNaam='$text'", ARRAY_A);
echo("SELECT * FROM quotation_diensten WHERE dienstNaam='".$text."'");

if($wpdb->num_rows == 0){
  $value_exists = $wpdb->get_results("SELECT * FROM quotation_diensten WHERE dienstValue = $value", ARRAY_A);
  if($wpdb->num_rows == 0){
    echo "No rows found";
    $wpdb->insert('quotation_diensten',
      array(
        "dienstNaam" => $text,
        "dienstValue" => $value
      ),
      array('%s','%d')
    );
  } else {
    echo "Row found";
    $wpdb->update("quotation_diensten",
      array(
        "dienstNaam" => $text
      ),
      array( "dienstValue"=> $value
      ),
      array("%s")
    );
  }
} else {
  echo "($value,$text) Bestaat,<br>";
  $wpdb->update("quotation_diensten",
    array(
      "dienstValue" => $value
    ),
    array( "dienstNaam"=> $text
    ),
    array("%d")
  );
}
$wpdb->flush();
echo "<hr>";
//delete
$allServices = $wpdb->get_results("SELECT * FROM quotation_diensten", ARRAY_A);
foreach ($allServices as $service) {
  if(!in_array($service["dienstValue"], $allValues)){
      //verwijderen
      $wpdb->delete( "quotation_dienstaanvraag", array('dienstenID'=>$service["dienstenID"]) );
      $wpdb->delete( "quotation_bedrijfsdiensten", array('dienstenID'=>$service["dienstenID"]) );
      $wpdb->delete( "quotation_diensten", array('dienstenID'=>$service["dienstenID"]) );
  }
}
}
}

这是$choices

的内容
array(3) {
   [0]=>
      array(3) {
         ["text"]=>
            string(9) "Service 1"
         ["value"]=>
            string(1) "1"
         ["isSelected"]=>
            bool(false)
      }
       [1]=>
          array(4) {
             ["text"]=>
                string(9) "Service 2"
             ["value"]=>
                string(1) "2"
             ["isSelected"]=>
                bool(false)
             ["price"]=>
                string(0) ""
           }
       [2]=>
           array(4) {
               ["text"]=>
                   string(9) "Service 3"
               ["value"]=>
                   string(1) "3"
               ["isSelected"]=>
                   bool(false)
               ["price"]=>
                   string(0) ""
             }
          }

foreach循环第一次给我一行是正确的。

第二次和第三次说0行。

这是我的数据库结构:

dienstenID      | dienstNaam | dienstValue
221                Service 1 |    1
351             |  Service 2 |    2
352             |  Service 3 |    3

我和我的同事无法弄清楚原因。这有什么不对?

1 个答案:

答案 0 :(得分:0)

首先,以下行肯定是错误的:

$name_exists = $wpdb->get_results("SELECT * FROM quotation_diensten WHERE dienstNaam='$text'", ARRAY_A);

为什么呢?因为没有解释单引号中的变量名,所以您将字符串值$text传递给数据库,这肯定不是您想要的。我想如果你改变它,它将解决你的问题。

使用$wpdb->prepare代码更改它。将变量自己编写到SQL中是不好的做法。

第三件事是你已经在这里发布了很多代码 - 请阅读:https://stackoverflow.com/help/mcve