我有一个iOS应用程序,我构建了一个API来从SQL Server数据库中提取一些数据。当我的应用程序发送带有空字符串的查询时,它不返回任何行,即使它应该。
$connectionInfo = array( "Database"=>db, "UID"=>$user, "PWD"=>$pass);
$conn = sqlsrv_connect($ip, $connectionInfo);
if ( $conn ) {
//connected
}
else {
echo "Error:"; echo "<br>";
die( print_r( sqlsrv_errors(), true));
}
/**************************************/
/* RETRIEVAL */
/**************************************/
$prod = new StdClass(); $arr = array(); $temp = array();
$search = $_GET['search'];
$search = "%$search%";
$sql = "SELECT
name, qty
FROM
table
WHERE
name LIKE ?";
$stmt = sqlsrv_prepare( $conn, $sql, array($search));
sqlsrv_execute( $stmt );
$i = 0;
if ( $stmt === false ) {
die( print_r( sqlsrv_errors(), true) );
}
else {
while ( $row=sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) {
$newProd = clone $prod;
$newProd->mainInfo = $row['name'];
$newProd->secondInfo = $row['qty'];
$arr[] = $newProd;
}
}
http_response_code(200);
echo json_encode($arr);
sqlsrv_close($conn);
我在macOS上用PHP和Apache构建了API,它按预期工作。当我在Windows服务器上复制文件时,如果我的应用程序访问类似于192.168.0.102/file.php?search=
的链接,它将在Windows上不返回任何行,并且在macOS中它将返回表格的所有行,如我所愿。我知道脚本有效并且没有问题,因为如果我的应用程序访问类似于192.168.0.102/file.php?search=someName
的链接,它将返回相应的行。如果变量search
为空,我希望应用程序显示所有行。我应该用其他方法来达到这个目的,还是我的错误呢?
你可以通过不使用sql条件来实现这一点,当“搜索”$ _GET param未提供或为空时。
示例如何实现,从以下位置更改代码:
$search = $_GET['search'];
$search = "%$search%";
$sql = "SELECT
name, qty
FROM
table
WHERE
name LIKE ?";
这样的事情:
$search = null;
if (true === array_key_exists('search', $_GET) && false === empty($_GET['search'])) {
$search = '%' . $_GET['search'] . '%';
}
$sql = "SELECT name, qty FROM table";
if (false === is_null($search)) {
$sql .= ' WHERE name LIKE ?';
}