我对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转储:
object(mysqli_result)#2(5){[“current_field”] =&gt; int(0)[“field_count”] =&gt; int(2)[“lengths”] =&gt; NULL [“num_rows”] =&gt; int(0)[“type”] =&gt; int(0)}
很明显,我不知道自己在做什么,所以感谢任何帮助。
感谢。
答案 0 :(得分:2)
这里缺少关系表,它会存储膳食和食材之间的联系。
您的查询中也有错误,因为首先您尝试正确使用/ b命名,命名列,然后使用它来命名表。
恕我直言,你应该这样做(添加关系表):
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>";
}
}
}
答案 1 :(得分:1)
行号会有所帮助,看看第15行是否为$ results的赋值,或者第15行是$ results-&gt; num_rows
我还假设您在代码中的某处有一个$ db_conx-&gt; connect命令,以便在运行查询之前打开数据库连接?
答案 2 :(得分:1)
您的SQL查询无效:WHERE子句中没有ingred.name
这样的列,因为您已将该表重命名为b
。
没有理由在此查询中重命名表(使用AS ...
)。将该条款保留。然后添加一个连接条件(例如,... JOIN ingred ON (...)
- 省略此操作将使查询从main_meal
返回每一行。
此外,您的代码中可能存在SQL注入漏洞,因为您正在将(可能未经过滤的)$searchq
变量的内容插入到查询中。使用查询占位符作为LIKE
的参数。
答案 3 :(得分:1)
你可以尝试一下吗?
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: %s\n", $db_conx->error);
}
$count = $results->num_rows;
if($count > 0){
while($row=$results->fetch_assoc()){
echo $row['ingredName'];
echo $row['name'] . "<br />";
$output="ff";
}
}
}
?>