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 $ .ajax方法显示包含MySQL表数据的JSON [关闭]
使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据
从 php While 循环中调用的 jQuery 脚本无法正常工作