Php &引用;大于;及;少于;运算符不在查询中工作
“相等”和“不相等”运算符在我的搜索查询中非常有效。 但是,“大于”和“小于”操作员不工作 例如,当我键入“SELECT*FROMPhp &引用;大于;及;少于;运算符不在查询中工作,php,mysqli,Php,Mysqli,“相等”和“不相等”运算符在我的搜索查询中非常有效。 但是,“大于”和“小于”操作员不工作 例如,当我键入“SELECT*FROMexpressFormWHEREefPostage!=460”时,我可以得到 ,效果很好 但是,当我键入“SELECT*FROMexpressFormWHEREefPostage时,您正在破坏您的查询,将htmlspecialchars()之类的内容应用于整个内容!这将导致类似于$sql=trim(preg\u replace('/\s+/','$sQuery));$
expressForm
WHEREefPostage
!=460”时,我可以得到
,效果很好
但是,当我键入“SELECT*FROM
expressForm
WHEREefPostage
时,您正在破坏您的查询,将htmlspecialchars()之类的内容应用于整个内容!这将导致类似于$sql=trim(preg\u replace('/\s+/','$sQuery));$sql=htmlspecialchars($sql);$sql=mysqli\u real\u escape\u字符串的内容($mysqli,$sql);$sql=stripslashes($sql)
-你只是在到处乱扔转义函数,祈祷你能在不破坏数据的情况下保护自己?!你试图转义用户输入的行为似乎到处都是,在我看来,这很像是散弹枪调试。通常你会使用预先准备好的语句来解决这些问题。PDO和我的sqli支持准备语句“大于”和“小于”运算符在查询中不起作用"…当您将SQL封装在htmlspecialchars
中时,您期望得到什么?…您正在转换
和,您只需要转义您在SQL语句中比较的变量,而不是整个请求。顺便说一句,stripslashes已从PHP中删除,理由是它最终比无用更糟糕,实际上是一个活动的menace.如果您使用的PHP版本仍然有stripslashes,那么我怀疑您可能需要更新。如果我最初需要键入一个查询,如“SELECT*FROM expressForm WHERE efPostage!=460”,我如何才能转义查询中的变量?
$mysqli = mysqli_connect("localhost", "XXX", "XXX", "express")
or die("Error connecting to database: ".mysqli_error($mysqli));
$sql = trim(preg_replace('/\s\s+/', ' ', $sQuery));
$sql = htmlspecialchars($sql);
$sql = mysqli_real_escape_string($mysqli, $sql);
$sql = stripslashes($sql);
$sQueryResults = $mysqli->query($sql);
if(mysqli_num_rows($sQueryResults) > 0) {
if (strpos($sql, 'FROM `expressForm`') !== false) {
echo "<h3 class = \"entity\"> expressForm </h3>";
echo '<table class=\"table table-striped table-bordered table-hover\">';
echo "<tr><th>efSerialNo</th><th>signedStID</th><th>efOfficeCode</th><th>efDateMailed</th><th>efPostage</th></tr>";
while($row = mysqli_fetch_array($sQueryResults)) {
echo "B";
echo "<tr><td>";
echo $row['efSerialNo'];
echo "</td><td>";
echo $row['signedStID'];
echo "</td><td>";
echo $row['efOfficeCode'];
echo "</td><td>";
echo $row['efDateMailed'];
echo "</td><td>";
echo $row['efPostage'];
echo "</td></tr>";
}
echo "</table>";
}
else {
echo "No results<br>";
}
$mysqli->close();
$query = "SELECT * FROM table WHERE column = '"
. mysqli_real_escape_string ($mysqli, $parameter)
. "'";
$stmt = $mysqli->prepare ("SELECT * FROM table WHERE column = ?");
$stmt->bind_param ("i", $value); // "i" indicates that this is expected to be an integer. See documentation for binding other types
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
var_dump ($result);