【问题标题】:using select query doesn't work in order to retrieve the required data from database使用选择查询无法从数据库中检索所需数据
【发布时间】:2017-07-17 23:53:33
【问题描述】:

我在 Wordpress 中使用 PHP 和 MYSQL,以便根据用户选择从数据库中检索数据,但此查询不返回任何数据。

我正在使用带有 prepare()get_results()$wpdb

并尝试回显查询以调试代码并分配正确的变量以便在数据库中的值与用户输入之间进行比较。

sql查询:

    $sql = $wpdb->prepare("select i.siteID
         , i.siteNAME
         , i.equipmentTYPE
         , c.latitude
         , c.longitude
         , c.height 
         , o.ownerNAME
         , o.ownerCONTACT
         , x.companyNAME
         , y.subcontractorCOMPANY
         , y.subcontractorNAME
         , y.subcontractorCONTACT
      from site_info i
      LEFT  
      JOIN owner_info o
        on i.ownerID = o.ownerID
      LEFT  
      JOIN company_info x
        on i.companyID = x.companyID
      LEFT 
      JOIN subcontractor_info y
        on i.subcontractorID = y.subcontractorID
        LEFT JOIN site_coordinates c
        on i.siteID=c.siteID 
        where 
        i.siteNAME = %s
        AND 
        o.ownerNAME = %s
        AND 
        x.companyNAME = %s
       ",$site_name,$owner_name,$company_name);
    echo $site_name;
     $query_submit =$wpdb->get_results($sql);

foreach ($query_submit as $obj) {
             echo "query is working";
    echo "<table width='30%' ";
echo     "<tr>";
echo         "<td>".$obj->siteNAME."</td>";
echo         "<td>".$obj->ownerNAME."</td>";
echo         "<td>".$obj->companyNAME."</td>";
echo         "<td>".$obj->subcontractorNAME."</td>";
echo         "<td>".$obj->siteID."</td>";
echo         "<td>".$obj->equipmentTYPE."</td>";
echo         "<td>".$obj->latitude."</td>";
echo         "<td>".$obj->longitude."</td>";
echo         "<td>".$obj->height."</td>";
echo         "<td>".$obj->ownerCONTACT."</td>";
echo         "<td>".$obj->subcontractorCONTACT."</td>";
echo         "<td>".$obj->subcontractorCOMPANY."</td>";
echo     "</tr>";
echo "</table>";
    } 

为了调试代码,我尝试回显 sql

回显 $sql; 它显示了带有分配给正确变量的值的 sql 查询。

谁能告诉我我的错误在哪里导致查询停止而不是运行到 foreach 循环中?

在我更改查询并将值作为字符串代替 %s 后,我得到了上述结果。 我意识到它不起作用的问题是什么,因为 %s 是一个数组,但是当我放入一个字符串时它工作正常。 我正在将字符串转换为数组,因为我不转换我会得到这个错误:

Xdebug: Fatal error: Uncaught Error: Cannot use object of type stdClass as array in /opt/lampp/htdocs/wordpress/wp-content/themes/wp-portfolio/search-info.php:245 Stack trace: #0 /opt/lampp/htdocs/wordpress/wp-includes/template-loader.php(74): include() #1 /opt/lampp/htdocs/wordpress/wp-blog-header.php(19): require_once('/opt/lampp/htdo...') #2 /opt/lampp/htdocs/wordpress/index.php(17): require('/opt/lampp/htdo...') #3 {main} thrown in /opt/lampp/htdocs/wordpress/wp-content/themes/wp-portfolio/search-info.php on line 245. Output triggered in /opt/lampp/htdocs/wordpress/wp-content/plugins/query-monitor/collectors/php_errors.php on line 163

【问题讨论】:

  • 以纯文本形式发布查询。并显示您认为应该返回的数据。
  • @PaulSpiegel 我不明白你的要求我将编辑问题并添加必须返回的假定数据
  • @Strawberry 你在问什么??

标签: php mysql wordpress foreach


【解决方案1】:

我解决了我在查询中迭代以将所选数据作为数组检索时发生的问题。 这是我使用的代码:

             <?php


                 $query_site_name =$wpdb->get_results ("select DISTINCT siteNAME  from site_info");
                  foreach($query_site_name as $site_name)
                  {
                   $site_name = (array)$site_name;
                   echo "<option value = '{".$site_name ['siteNAME']."}'>".  $site_name['siteNAME']."</option>";
                  } 
             ?>

我把迭代过程从数组改成了对象,所以变成了:

 <?php


                     $query_site_name =$wpdb->get_results("select DISTINCT siteNAME  from site_info");
                      foreach($query_site_name as $site_name)
                      {
            //           $site_name = (array)$site_name;
                       echo "<option value = '".$site_name ->siteNAME."'>".  $site_name->siteNAME."</option>";
                      } 
                 ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-10
    • 2014-06-29
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多