MySQL从查询结果中获取数据

Posted

技术标签:

【中文标题】MySQL从查询结果中获取数据【英文标题】:MySQL get data from a query result 【发布时间】:2017-04-25 15:22:15 【问题描述】:

我是 phpmysql 开发的新手。我使用 Visual Studio 在 Cordova 中构建了一个应用程序。该应用程序的工作方式如下:

    用户从下拉列表中选择序列号 选择序列号后,数据显示在图表上 应用中有一个拨动开关,通过它我根据serial number在数据库中插入onoff状态

我想做什么?

当用户选择任何序列号时,开关将根据该特定serial numberCommand Name 显示最后一个ONOff 状态。

为此,我生成了一个msql query,这个查询显示了所选序列号的最后一个command name

下面是我的 PHP 代码:

<?php
 require_once('config.php');

 $dsn = $_REQUEST['Device_Serial_Number'];
 $cmd_Name = $_REQUEST['Command_Name'];

 $sqlFet = "select ADC.Server_Device_Command_ID , ADC.Device_ID ,
 ADC.Server_Command_ID as Server_Command_ID, ASD.Command_Name
 from ADS_Server_Device_Command ADC
 inner join ADS_Server_Command ASD on adc.Server_Command_ID = asd.Server_Command_ID
 inner join ADS_Device dsn on adc.Device_ID = dsn.Device_ID
 where dsn.Device_Serial_Number = '$dsn'
 order by adc.Server_Device_Command_ID desc LIMIT 1";

  $result = mysqli_query($con,$sqlFet);

  mysqli_close($con);
  echo $cmd_Name;

?>

下面是我在 javascript 中的 AJAX 调用:

 $.ajax(
                method: "GET",
                url: "http://localhost:MyPort/server/toggleFetch.php",

                data:  Command_Name: tData , Device_Serial_Number: selectedVal ,
                success: function (data) 
                    var dt = data;
                    if (dt.Command_Name == "On") 
                        $("#cmn-toggle-7").prop('checked', true);
                    
                    else if (dt.Command_Name == "Off") 
                        console.log('else');

                        $("#cmn-toggle-7").prop('checked', false);
                    

                ,
                error: function (xhr, status, error) 
                   alert(xhr.responseText, status, error);
                    //toastr.success('Data not fetched', '',  timeOut: 2000 )
                    //alert('Error');
                

            );

但它没有显示所需的结果并给出如下图所示的错误:

更新代码:

下面是我的php更新代码

require_once('config.php');

$dsn = $_REQUEST['Device_Serial_Number'];
//$cmd_Name = $_REQUEST['Command_Name'];

$sqlFet = "select ADC.Server_Device_Command_ID , ADC.Device_ID ,
ADC.Server_Command_ID as Server_Command_ID, ASD.Command_Name
from ADS_Server_Device_Command ADC
inner join ADS_Server_Command ASD on adc.Server_Command_ID = asd.Server_Command_ID
inner join ADS_Device dsn on adc.Device_ID = dsn.Device_ID
where dsn.Device_Serial_Number = '$dsn'
order by adc.Server_Device_Command_ID desc LIMIT 1";

$result = mysqli_query($con,$sqlFet);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);


mysqli_close($con);
echo $row["Command_Name"];

下面是ajax

 $.ajax(
                method: "GET",
                url: "http://localhost:MyPort/server/toggleFetch.php",
                //dataType: "json",
                data:  Command_Name: tData , Device_Serial_Number: selectedVal ,
                success: function (data) 

                    var dt = data;

                    if (dt == "On") 
                        $("#cmn-toggle-7").prop('checked', true);
                    
                    else if (dt == "Off") 
                        console.log('else');

                        $("#cmn-toggle-7").prop('checked', false);
                    

                ,
                error: function (xhr, status, error) 
                   alert(xhr.responseText, status, error);
                    //toastr.success('Data not fetched', '',  timeOut: 2000 )
                    //alert('Error');
                

            );

现在在运行代码时我没有收到任何错误,但我仍然没有得到我需要的结果,即切换不会改变它的状态

更多信息请看下图

我不知道是什么问题,任何帮助将不胜感激。

【问题讨论】:

toggleFetch.php中的php代码吗? 好吧,不会有任何 dt.Command_name 因为它不是 json 对象,因此没有什么可以真正得到的。如果你只是简单地将数据放入一个 div 中,你可能只会看到 echo $cmd_Name; 的文本,所以试试 echo json_encode($cmd_Name); 看看它是否出现。否则你可能需要JSON.parse() 好吧,我试试,我告诉你 @A.Lau 尝试使用 JSON.parse() 并没有它,但仍然出现相同的错误 echo $cmd_Name; 应该回显什么? 【参考方案1】:

第一步:不要将带有 AJAX 的 command_name 发送到 PHP 脚本(这会导致第 5 行出现错误!!),这不是必需的。第二步:在 PHP 脚本中,您必须更改 echo $command_name,以根据 $dsn 从 DB 回显结果。所以从 DB 回显结果。

$row = mysqli_fetch_array($result, MYSQLI_BOTH);
echo $row["Command_name"]; //This should show ON/OFF state from DB to AJAX.

【讨论】:

第三步:你有 IF dt.Command_name = "..... 我认为应该有 IF dt = "on" 因为 AJAX 会放入 PHP 脚本的变量 DATA 输出中。例如您的 PHP 脚本将回显 ON(基于 $dsn 的状态),而 AJAX 会将其置于变量 DATA 中。所以这是错误的(dt.Command_name)。您必须更改它。 它仍然在第 5 行出现错误$cmd_Name = $_REQUEST['Command_Name']; 我在不必要的情况下忘记了抱歉这一行。删除它,你不会从 REQUEST 中读取 cmd_name 而是从 DB 中读取。 好的,让我试一试 我在我的服务器上尝试了这个解决方案,它工作!我没有想法,也许检查您的输入是否有 id="cmn-toggle-7"【参考方案2】:

这个错误意味着,AJAX 没有通过 GET 发送 Command_Name。如果变量 tData 包含某个值,则必须检查它。

【讨论】:

当用户选择任何序列号时,开关将根据该特定序列号的命令名称显示最后的 ON 或 Off 状态。为此,我生成了一个 msql 查询,该查询显示了所选序列号的最后一个命令名称下面是我的 PHP 代码:

以上是关于MySQL从查询结果中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

无法从导入的 MySQL 数据库中获取地理位置结果

从日期时间字段Mysql查询中获取日期

java 怎样查询MYSQL数据库中的数据;根据id字段查询,获取id 对应的一行数据,并显示 在标签上。

无法从 MySql 数据库中获取 ResultSet

如何获取 HTML 表单以从 Mysql 数据库中查询和生成结果

mysql查询数据