使用 JSON 的数据库连接
Posted
技术标签:
【中文标题】使用 JSON 的数据库连接【英文标题】:Database connectivity using JSON 【发布时间】:2018-06-01 07:01:11 【问题描述】:我的php代码,
<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);
$serverName = "AE58RETY245YU";
$connectionInfo = array( "Database"=>"Test", "UID"=>"bala",
"PWD"=>"bala");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn )
echo "Connection established.<br />";
else
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
$outp=array();
$sql = "SELECT Point FROM ".$obj->table."LIMIT".$obj->limit;
$stmt = sqlsrv_query( $conn, $sql );
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) )
$outp=$row['Point'];
echo json_encode($outp);
?>
我的html代码,
<!DOCTYPE html>
<html>
<body>
<h2>Get data as JSON from a PHP file on the server.</h2>
<p>The JSON received from the PHP file:</p>
<p id="demo"></p>
<script>
var obj, dbParam, xmlhttp;
obj = "table":"PointEvent", "limit":10 ;
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
if (this.readyState == 4 && this.status == 200)
document.getElementById("demo").innerHTML = this.responseText;
;
xmlhttp.open("GET", "testsql.php?x=" + dbParam, true);
xmlhttp.send();
</script>
</body>
</html>
你好,
以上是我的 PHP 和 HTML 代码,我尝试使用 Json(编码和解码方法)连接 sql 数据库并尝试打印单列,但得到的错误是
'警告:sqlsrv_fetch_array() 期望参数 1 是资源,布尔值在'中给出。
谁能帮我解决这个问题。
提前致谢。
【问题讨论】:
【参考方案1】:我在您的查询“添加空间”中发现了连接问题,否则查询看起来类似于“SELECT Point FROM mytableLIMIT1”
来自
$sql = "SELECT Point FROM ".$obj->table."LIMIT".$obj->limit;
到
$sql = "SELECT Point FROM ".$obj->table." LIMIT ".$obj->limit;
也可以通过在while之前添加一行来正确处理异常
if( $stmt === false ) /*!Handle exception here*/
看来您是编程新手。在使用数据库时,永远不要相信像 $_GET["x"] 这样的原始用户输入。进行适当的清理,否则最终会导致 sql 注入。
通过以下链接了解更多信息
What are the best PHP input sanitizing functions?
How can I prevent SQL injection in PHP?
【讨论】:
我在查询中使用了空格,但我没有得到准确的输出。我的输出就像 Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]'10' 附近的语法不正确。[消息] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]'10' 附近的语法不正确。)) 我认为这可能是转义内容的问题。你在查询变量内容中使用了$,可能是表名吗? 对不起,我没听明白。你能把查询写在这里吗,如何在查询变量内容中使用$,可能是表名....pleaseeee 变量 $obj->table 中是否包含字符串“$”?例如。 “我的数据库$mytablename” 例如。 $a = "堆栈"; $b = "溢出"; echo "$a$b";//堆栈溢出。 echo "$a\$b";//stack$b【参考方案2】:带有$stmt = sqlsrv_query($conn, $sql);
语句的行可能会导致您的问题。我认为$sql
没有很好地形成。我不确定 MS SQL Server 有 'LIMIT'
关键字,所以先试试这个:$sql = "SELECT Point FROM ".$obj->table;
。
在使用sqlsrv_fetch_array()
之前,您还必须始终检查sqlsrv_query()
的结果:
$sql = "SELECT Point FROM ".$obj->table;
$stmt = sqlsrv_query($conn, $sql);
if( $stmt === false )
echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
exit;
...
【讨论】:
以上是关于使用 JSON 的数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
Android 使用 AsyncTask 连接 MySql 并以 JSON 或 String 的形式返回数据
当从 MySQL 数据库动态加载元素时,在 PHP 中连接 2 个 JSON 数组