按表单数据对出版物进行排序。查询数据库时出错(RedBeanPHP)
我需要根据从表单收到的数据对出版物进行排序 我得到这个错误: 致命错误:Uncaught[42000]-SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第1行跟踪:0 D:\PHP\OSPanel\domains\test\libs\rb.php1080:redbeanppp\Driver\RPDO->runQuery'SELECT*FROM p..中使用的正确语法,数组1d:\PHP\OSPanel\domains\test\libs\rb.php4245:redbeanppp\Driver\RPDO->GetAll'SELECT*FROM p..,数组2d:\PHP\OSPanel\domains\test\libs\rb.php12311:redbeanppp\Adapter\DBAdapter->get'SELECT*FROM p..,数组3d:\PHP\OSPanel\domains\test libs\rb.php13324:redbeanppp\Facade::query'get','SELECT*FROM p,数组4 D:\PHP\OSPanel\domains\test\index.php31:redbeanppp\Facade::getAll'SELECT*FROM p..,数组5{main}在第810行的D:\PHP\OSPanel\domains\test\libs\rb.PHP中抛出 为什么不能将查询字符串作为参数传递给函数 我试图提出一种不同的算法,以避免将字符串$sql传递到R::getAll函数的参数中,但它不起作用 以下是index.php中的表单本身:按表单数据对出版物进行排序。查询数据库时出错(RedBeanPHP),php,jquery,redbean,Php,Jquery,Redbean,我需要根据从表单收到的数据对出版物进行排序 我得到这个错误: 致命错误:Uncaught[42000]-SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第1行跟踪:0 D:\PHP\OSPanel\domains\test\libs\rb.php1080:redbeanppp\Driver\RPDO->runQuery'SELECT*FROM p..中使用的正确语法,数组1d:\PHP\OSPanel\dom
<form class = "search_form">
<select name = "region">
<option value = "none" hidden = ""> Select a region </option>
<option value = "region1"> Region # 1 </option>
<option value = "region2"> Region # 2 </option>
<option value = "region3"> Region # 3 </option>
<option value = "region4"> Region # 4 </option>
</select>
<select name = "sity">
<option value = "none" hidden = ""> Select a city </option>
<option value = "sity1"> City # 1 </option>
<option value = "sity2"> City # 2 </option>
<option value = "sity3"> City # 3 </option>
<option value = "sity4"> City # 4 </option>
</select>
<select name = "make">
<option value = "none" hidden = ""> Select a make </option>
<option value = "make1"> Make # 1 </option>
<option value = "make2"> Make # 2 </option>
<option value = "make3"> Make # 3 </option>
<option value = "make4"> Make # 4 </option>
</select>
<select name = "model">
<option value = "none" hidden = ""> Select a model </option>
<option value = "model1"> Model # 1 </option>
<option value = "model2"> Model # 2 </option>
<option value = "model3"> Model # 3 </option>
<option value = "model4"> Model # 4 </option>
</select>
<input type = "number" name = "volume" min = "0" step = "any" placeholder = "Enter engine volume">
<input type = "number" name = "mileage" min = "0" placeholder = "Enter vehicle mileage">
<input type = "number" name = "numOfOwners" min = "0" placeholder = "Enter the number of hosts">
<button type = "submit" class = "search-btn btn btn-warning"> Search </button>
</form>
$sql = "SELECT * FROM publication";
if(!empty($data)){
$sql .=" WHERE";
$bindings = [];
$i = 0;
foreach ($data as $key => $value) {
$bindings[$i] = $value;
$i++;
if($data->next){
$sql .= " $key = ? AND";
}else{
$sql .=" $key = ?";
}
}
$publications = R::getAll($sql, $bindings);
exit(json_encode($publications));
}else{
$publications = R::findAll('publication', "ORDER BY `id` DESC LIMIT ?, ?", array($from, $publication_on_page));
}
main.js:
$('.search-btn').click(function (e){
e.preventDefault();
let region = $('select[name="region"]').val(),
sity = $('select[name="sity"]').val(),
make = $('select[name="make"]').val(),
model = $('select[name="model"]').val(),
volume = $('input[name="volume"]').val(),
mileage = $('input[name="mileage"]').val(),
numOfOwners = $('input[name="mileage"]').val();
let formData = new FormData();
if(region != 'none'){
formData.append('region', region);
}
if(sity != 'none'){
formData.append('sity', sity);
}
if(make != 'none'){
formData.append('make', make);
}
if(model != 'none'){
formData.append('model', model);
}
if(volume != ''){
formData.append('volume', volume);
}
if(mileage != ''){
formData.append('mileage', mileage);
}
if(numOfOwners != ''){
formData.append('numOfOwners', numOfOwners);
}
$.ajax({
url: 'index.php',
type: 'GET',
dataType: 'json',
processData: false,
contentType: false,
cache: false,
data: formData,
success (data) {
$("#publ").html('');
for(value in data){
$("#publ").append(
'<div class="col-md-6" style="background-color: red;">' + data[value]['id'] + '</div>'
);
}
}
});
});
告诉我排序是否正确?似乎$data->next在这里不起作用,可能是因为$data是数组而不是对象,您可以尝试以下方法:
$sql = "SELECT * FROM publication";
if(!empty($data)){
// Create an array for columns to make the filter
$filters = [];
$bindings = [];
foreach ($data as $key => $value) {
// No need to index for $bindings
$bindings[] = $value;
// Add column and ? to array
$filters[] = "$key = ?";
}
// Apply glue to get the query
$sql .= ' WHERE ' . implode(' AND ', $filters);
// Do you want to order these too?
$publications = R::getAll($sql, $bindings);
exit(json_encode($publications));
}else{
$publications = R::findAll('publication', "ORDER BY `id` DESC LIMIT ?, ?", array($from, $publication_on_page));
}
您应该看到:注意:尝试获取非对象的属性“next”。您是否已打开?逗号我认为是您的问题,或者更确切地说是缺少逗号您的if$data->next从来都不是真的请参阅我的第一条注释,因此您的WHERE子句是在没有任何和关键字的情况下生成的。@El_Vanja,很遗憾,错误报告已关闭。什么可以替换$data->next?根据查询语法上的错误,查询中缺少and关键字-'sity='sity1'make='make1'model='model1'volume=miliege=numoffown'。查询应该是-'sity='sity1'和make='make1'以及model='model1'和volume=miliety=numoffown',依此类推。