jQuery 调用 PHP 文件从 mysql 数据库中获取数据?

Posted

技术标签:

【中文标题】jQuery 调用 PHP 文件从 mysql 数据库中获取数据?【英文标题】:jQuery calls a PHP file to get data from mysql database? 【发布时间】:2013-04-11 20:36:26 【问题描述】:

好的,所以我在网上找到了许多教程,并一步一步地学习了它们。我的问题是我对 javascript/jQuery 的了解比我对 php 的了解要好得多,而且我什至无法弄清楚如何调试该部分中出了什么问题。基本上我有一堆按钮和一个按钮,当按下按钮时,它决定了表单中的默认值。

jQuery 端

$(document).ready(function()
// CSPC and ADDUPDATE TOGGLE ARE DEFINED GLOBALLY
    $('ul#parts').on('click', 'button', function()
        ADDUPDATETOGGLE = "ADD";
        CSPC = $(this).attr("data-cspc");
        var   form = $('div.sidebar form'),
              sr = 0;
        form.find("#cspc").val(CSPC);
        $.ajax(
            type: "GET",
            url: "getRate.php",
            data: "pid=A5843",
            dataType: "json",
            success: function(data)
                sr = data;
            
        );
        form.find("#strokeRate").val(sr);
        showForm();
    );
);

PHP端

<?php

$host = "localhost";
$user = "username";
$pass = "password";
$databaseName = "movedb";
$tableName = "part parameters";

$con = mysql_connect($host, $user, $pass);
$dbs = mysql_select_db($databaseName, $con);
//get the parameter from URL
$pid=$_GET["pid"];
if (empty($pid))
    echo "1"; //default rate

else
    $db=mysql_pconnect("localhost");//connect to local database
    mysql_select_db("movedb", $db);//select the database you want to use
    if (!$db)
        echo ("error connecting to database");              
    
    else
        //connection successful
        $sql = "SELECT 'Processing Rate (ppm)' FROM 'part parameters' WHERE 'Part Number' LIKE '" . $pid . "'";//sql string command
          $result=mysql_query($sql);//execute SQL string command
          //result contains rows
          $rows = mysql_fetch_row($result)
          echo json_encode($rows["Processing Rate (ppm)"]); 
    



?>

任何想法为什么 sr 没有被设置?

我离基地还差吗?

我还会无耻地指出,我不知道 $user 和 $pass 应该设置为什么。我在任何地方都找不到解释

提前致谢!

编辑:我按照下面的大部分指示,现在当我跑步时

http://localhost/getRate.php?pid=A5843 

它显示“未选择数据库”。另外,我现在无法访问我们原来的 MS Access 文件(我的一个团队成员拥有它),但是一旦我得到它,我会将所有标题变成一个单词标题。这是我们在网络编程/数据库管理方面的第一份工作,因此我们会不断学习。

【问题讨论】:

MySQL 真的在运行吗?您是否在浏览器控制台上检查过请求错误? 一方面,$rows = mysql_fetch_row($result) 缺少分号,这会导致语法错误并使该页面无用 $user$password 必须是您在数据库服务器上的凭据。它们很可能是不正确的,除非你解决这个问题,否则什么都不会起作用。 首先,为什么要连接到 2 个数据库但第一个未使用?其次,我认为您的列名中的空格(或括号)导致了问题。响应中显示了什么? 你从浏览器中的getRate.php?pid=A5843得到什么 【参考方案1】:

$user$pass 应设置为您的 MySql 用户的用户名和密码。

我会使用这样的东西:

JS

success: function(data)
             if(data.status === 1)
                 sr = data.rows;
             else
                 // db query failed, use data.message to get error message
             
        

PHP:

<?php

    $host = "localhost";
    $user = "username";
    $pass = "password";
    $databaseName = "movedb";
    $tableName = "part parameters";

    $con = mysql_pconnect($host, $user, $pass);
    $dbs = mysql_select_db($databaseName, $con);
    //get the parameter from URL
    $pid = $_GET["pid"];
    if(empty($pid))
        echo json_encode(array('status' => 0, 'message' => 'PID invalid.'));
     else
        if (!$dbs)
            echo json_encode(array('status' => 0, 'message' => 'Couldn\'t connect to the db'));       
        
        else
            //connection successful
            $sql = "SELECT `Processing Rate (ppm)` FROM `part parameters` WHERE `Part Number` LIKE `" . mysqli_real_escape_string($pid) . "`"; //sql string command
            $result = mysql_query($sql) or die(mysql_error());//execute SQL string command
            if(mysql_num_rows($result) > 0)
                $rows = mysql_fetch_row($result);
                echo json_encode(array('status' => 1, 'rows' => $rows["Processing Rate (ppm)"]);
            else
                echo json_encode(array('status' => 0, 'message' => 'Couldn\'t find processing rate for the give PID.'));   
            
        

    

?>

正如另一位用户所说,您应该尝试重命名数据库字段而不使用空格,以便 part parameters => part_parameters, Part Number => part_number

如果您仍然遇到问题(只要它不是生产服务器),请将其放在您的 php 文件的顶部:

error_reporting(E_ALL);
ini_set('display_errors', '1');

这将输出任何错误,并且应该可以帮助您找出问题所在。

【讨论】:

【参考方案2】:

您的数据库查询代码不正确:

    $sql = "SELECT 'Processing Rate (ppm)' FROM 'part parameters' WHERE 'Part Number' LIKE '" . $pid . "'";//sql string command

使用' 引用查询中的内容会将它们变成字符串,而不是字段/表名称。所以你的查询在语法和逻辑上都是错误的。您的代码只是假设成功,并且永远不会捕获 mysql 将吐出的错误。

查询应该是:

SELECT `Processing Rate (ppm)`
FROM `part parameters`
WHERE `Part Number` = '$pid'

注意在字段/表名称上使用反引号 (`),在 $pid 值上使用单引号 (')。

然后你执行查询:

$result = mysql_query($sql) or die(mysql_error());

如果失败,你会得到mysql返回的错误信息。

总体而言,您的代码容易受到SQL injection attacks 的攻击。在进一步使用此代码之前,最好阅读并了解如何防止这种情况发生。

【讨论】:

还应该注意的是,在字段和表名中使用空格和括号是非常不寻常的。您应该强烈考虑更改这些以消除空格和括号。【参考方案3】:

sr 它在成功回调函数之外。开始把它放到success函数中看看会发生什么

$.ajax(
        type: "GET",
        url: "getRate.php",
        data: "pid=A5843",
        dataType: "json",
        success: function(data)
            sr = data;
            form.find("#strokeRate").val(sr);
        
    );

记住,如果data是json,会变成js对象,所以不能直接使用data

【讨论】:

以上是关于jQuery 调用 PHP 文件从 mysql 数据库中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 自动完成从 Mysql 数据库中拉取

使用jQuery $ .ajax方法显示包含MySQL表数据的JSON [关闭]

使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据

从 php While 循环中调用的 jQuery 脚本无法正常工作

jQuery Ui 自动完成没有从 PHP MySQL 文件中获取价值

数据校验php/mysql/jquery