通过ajax调用加载mysqli php数据
Posted
技术标签:
【中文标题】通过ajax调用加载mysqli php数据【英文标题】:Load mysqli php data via ajax call 【发布时间】:2013-05-14 06:38:15 【问题描述】:我想要做的是通过 ajax 和 php 调用一些数据库数据。但是ajax调用不行,网上也找不到解决办法。
这是我的代码:
test.php
<?php
include_once 'db_class.php';
$cat = $_GET['cat'];
$dbconn = new dbconn('localhost', 'root', 'somepsw', 'blog');
$dbconn->set_query("select * from posts where category = '".$cat."'");
echo '<br/>'.$dbconn->query.'<br/>';
$result = $dbconn->result;
$num = $dbconn->num_results;
$array = mysqli_fetch_assoc($result);
echo json_encode($array);
?>
如果我在浏览器上输入该网址:http://127.0.0.1:82/blog/ws/test.php?cat=css
通过jsonEncode返回的数据是正确的,但是当我用jquery在html页面上加载它时,他无法读取数据。
test.html
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script>
function ajaxCall()
var css;
$.ajax(
url: 'test.php',
type: "GET",
data: cat: css,
dataType: 'json',
success: function(rows)
alert(rows);
,
error: function() alert("An error occurred.");
);
ajaxCall();
</script>
</head>
<body></body>
</html>
提前致谢。
【问题讨论】:
ajax 调用正在使用'/test.php'。浏览器正在使用“/blog/ws/test.php”。除非你正在做一些你没有展示的重写。 你不会从你的 test.php 中得到纯 json 数据,因为你已经打印了一些 echo ''.$dbconn->query.'';从您的代码中删除所有回显,仅 json_encode 除外。 按照@ManishJangir 的建议做,然后将var css;
更改为var css = "css";
,它会起作用。
你知道这是超级危险的,对吧?切勿将GET
之类的用户输入数据添加到 SQL 语句中。
解决了删除其他 echo 语句,并将 var css 设置为 var="css";感谢大家的支持。 @likeitlikeit 无论如何,如果这很危险,我应该如何以安全的方式编写相同的功能?有什么建议吗?
【参考方案1】:
您的变量 css
没有价值。您想使用 字符串 'css'
。也许您也希望能够加载其他类别。因此,将您的 ajaxCall
函数更改为
function ajaxCall(category)
$.ajax(
url: 'test.php',
type: "GET",
data: cat: category,
dataType: 'json',
success: function(rows)
alert(rows);
,
error: function()
alert("An error occurred.");
);
并使用它调用它
ajaxCall('css');
【讨论】:
【参考方案2】:我只是用 PDO 重写了 php 代码,现在应该更安全了。
db.php
<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpsw = "somepsw";
$dbname= "blog";
try
@$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpsw);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
catch(PDOException $e)
echo "Connection failed, an error occured! Please contact server administrator."; //user friendly message
getErrorsLog($e->getMessage());
function closeDbConn ()
$dbh = null;
function getErrorsLog($message)
$file = 'dberrors.log';
$date = date("d/m : H:i :");
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new error message to the file
$current .= $date.$message;
$current .= "\r\n";
// Write the contents back to the file
file_put_contents($file, $current);
exit();
?>
blogdata.php
<?php
include_once "db.php";
$tableName = "posts";
$data = array();
@$view = $_GET["view"];
if (isset($_GET["view"]))
$stmt = $dbh->prepare("SELECT * FROM $tableName WHERE category =? ORDER BY created DESC");
else
try
$stmt = $dbh->prepare("SELECT * FROM $tableName ORDER BY created DESC");
catch (PDOException $e)
getErrorsLog($e->getMessage());
$stmt->bindValue(1, $view, PDO::PARAM_STR);
$stmt->execute();
$affected_rows = $stmt->rowCount(); //Rows count
if ($affected_rows == 0)
echo "The data you looking for no longer exist, please contact the administrator.";
exit();
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row)
$data[] = $row;
echo json_encode($data);
closeDbConn();
?>
【讨论】:
以上是关于通过ajax调用加载mysqli php数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 PHP 脚本(由 AJAX 调用)随机无法正确加载 SESSION?