用php查询mySQL数据库。如何设置php变量的位置
所以我正在一个网站上为mySQL数据库开发搜索引擎。我希望用户能够选择如何搜索。就像这样用php查询mySQL数据库。如何设置php变量的位置,php,mysql,Php,Mysql,所以我正在一个网站上为mySQL数据库开发搜索引擎。我希望用户能够选择如何搜索。就像这样 $searchBy=mysqli_real_escape_string($conn, $_POST['recordType']); $searchText=mysqli_real_escape_string($conn, $_POST['searchText']); $getRecordsSQL = "SELECT * FROM weighs WHERE ID='$searchText'"; $re
$searchBy=mysqli_real_escape_string($conn, $_POST['recordType']);
$searchText=mysqli_real_escape_string($conn, $_POST['searchText']);
$getRecordsSQL = "SELECT * FROM weighs WHERE ID='$searchText'";
$recordsQuery = mysqli_query($conn,$getRecordsSQL);
上面的代码可以工作,但只用于按ID进行搜索。我如何让它看起来像这样
$searchBy=mysqli_real_escape_string($conn, $_POST['recordType']);
$searchText=mysqli_real_escape_string($conn, $_POST['searchText']);
$getRecordsSQL = "SELECT * FROM weighs WHERE '$searchBy'='$searchText'";
$recordsQuery = mysqli_query($conn,$getRecordsSQL);
那个代码不起作用,但你明白了。有没有一种方法可以设置查询的格式,以便用户可以选择他们想要查看的列(又称何处)
//this must be in selection for search
<form method="post" action="#">
<input type="text" id="searchText">
<select id="searchBy">
<option value="table name">table name</option>
<option value="table name 1">table name 1</option>
<option value="table name 2">table name 2</option>
<option value="table name 3">table name 3</option>
<input type="submit" id="submit">
</select>
</form>
<script>
//after you have to send value from from select to php with ajax or jquery
$(document).ready(function(){
$("#submit").on("click" ,function(){
var searchBy= $("#searchBy").val();
var searchText= $("#searchText").val();
$.ajax({
url: 'link_page_to_php_sql.php',
dataType: 'text',
cache: false,
contentType: false,
processData: false,
data: {searchBy: searchBy, searchText : searchText},
type: 'POST',
success: function (response) {
//some cod here if you wont after succes
}
});
});
});
您真的不应该使用转义字符串。为searchText使用带参数的准备语句,并为searchBy使用白名单。一旦你准备好了,使用反勾号,而不是列名称的引号。如果你想让一个PHP变量成为一个列,它必须在勾号中。在查询中使用它之前,您还应该将其列入白名单!您已经在使用一个API,该API支持带有有界变量输入的预处理语句,您应该利用带有占位符预处理语句的参数化查询来保护数据库免受攻击!开始使用和。注意:mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_查询接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:$db=new mysqli…和$db->prepare…过程接口是引入mysqli API时PHP 4时代的产物,不应在新代码中使用。real_escape_字符串仅用于用户数据,而不是列名。您的版本比OP的版本差。至少他用的是mysqli\u real\u escape\u字符串。你不能在里面。你想做什么来完成所有表单搜索列名不应该用引号括起来,应该用反勾号。一个好的答案应该解释问题中的错误,以及你是如何解决问题的。不要只是在没有解释的情况下发布代码。
<?php
//and this for sql link_page_to_php_sql.php
if (isset($_POST['searchBy'])){
$searchBy = $_POST['searchBy'];
$searchText= $_POST['searchText'];
}
$getRecordsSQL = "SELECT * FROM weighs WHERE '$searchBy'='$searchText'";
$recordsQuery = mysqli_query($conn,$getRecordsSQL);
?>