我对SQL或DB的了解非常有限,所以提前道歉。
我正试图在网页中制作一个类似表格的结构,一个餐名栏和一个配料栏——它也可以通过按钮进行搜索。
编辑:
感谢所有的回复,他们非常有帮助。错误不再发生,但是现在我没有从数据库中得到任何结果,但没有错误。
include("inc/dbConn.php"); /////$db_conx
if(isset($_POST["search"])){
$searchq = $_POST["search"];
$sql ="
SELECT main_meal.name, ingred.name
FROM main_meal
JOIN meal_ingred on meal_ingred.meal_id = main_meal.id
JOIN ingred ON ingred.id = meal_ingred.ingred_id
WHERE ingred.name LIKE '%$searchq%'";
$results = $db_conx->query($sql);
var_dump($results);
if($results->num_rows){
while ($row =$results->fetch_object()){
echo "{$row->name} ({$row->name})<br>";
}
}
}
为了澄清,这里是我的结构:
(很抱歉有外部链接,我没有足够的信誉来发布图片。)
http://i30.photobucket.com/albums/c340/Tyrage/Untitled-2_zpsc48126b3.png
$results转储:
对象(mysqli_result)#2(5){["current_field"]=>int(0)["field_count"]=>int(2)["length"]=>NULL["num_rows"]=>int(0
很明显,我不知道自己在做什么,所以任何帮助都很感激。
谢谢。
这里缺少一个关系表,它将存储膳食和配料之间的联系。
查询中也出现了错误,因为一开始您试图正确使用a/b命名来命名列,然后使用它来命名表。
IMHO你应该这样做(添加关系表):
if(isset($_POST["search"])){
$searchq = $_POST["search"];
$sql ="
SELECT main_meal.name AS a, ingred.name as b
FROM main_meal
JOIN rel_meal_ingred on rel_meal_ingred.meal_id = main_meal.id
JOIN ingred ON ingred.id = rel_meal_ingred.ingred_id
where ingred.name LIKE '%$searchq%'";
$results = $db_conx->query($sql);
if($results->num_rows){ //////line 15
while ($row =$results->fetch_object()){
echo "{$row->a} ({$row->b})<br>";
}
}
}
你可以试试这个吗?
SELECT *
FROM main_meal
JOIN meal_ingred ON meal_ingred.meal_id = main_meal.id
JOIN ingred ON meal_ingred.meal_id = main_meal.id
WHERE ingred.ingredName LIKE '%bread%'
LIMIT 0 , 30
php如下:
<?php
if(isset($_POST["search"])){
$searchq = $_POST["search"];
$sql ="
SELECT *
FROM main_meal
JOIN meal_ingred ON meal_ingred.meal_id = main_meal.id
JOIN ingred ON meal_ingred.meal_id = main_meal.id
WHERE ingred.ingredName LIKE '%$searchq%'
LIMIT 0 , 30
";
//$results = $db_conx->query($sql);
if (!$results = $db_conx->query($sql)) {
printf("Error: %sn", $db_conx->error);
}
$count = $results->num_rows;
if($count > 0){
while($row=$results->fetch_assoc()){
echo $row['ingredName'];
echo $row['name'] . "<br />";
$output="ff";
}
}
}
?>
行号会有所帮助,查看第15行是$results的赋值,还是第15行为$results->num_rows
我还假设您的代码中有一个$db_conx->connect命令,用于在运行查询之前打开数据库连接?
您的SQL查询无效:WHERE子句中没有ingred.name
这样的列,因为您已将该表重命名为b
。
没有理由在此查询中重命名表(使用AS ...
)。把那个条款去掉。然后添加一个联接条件(例如... JOIN ingred ON (...)
——省略它将使查询返回main_meal
中的每一行
此外,您的代码中可能存在SQL注入漏洞,因为您正在将(可能未经过滤的)$searchq
变量的内容插入到查询中。为LIKE
的参数使用查询占位符。