mysql 如何查询两个表中的数据,以根据特定的ID从一个表中获取名称,从另一个表中获取地址[重复]

ddrv8njm  于 2023-04-19  发布在  Mysql
关注(0)|答案(1)|浏览(130)

此问题已在此处有答案

How can I prevent SQL injection in PHP?(27回答)
3天前关闭。
我试图从两个不同的表中获取数据,方法是在搜索表单中输入学生ID,然后从第一个表中获取ID、Name,并将其与第二个表中的Address进行匹配。
如果我使用表单中的搜索结果,查询不会返回任何内容。

$sql = "SELECT     Students.StudentID, Students.StudentName, HomeADD.StudentADD
        FROM       Students
        INNER JOIN HomeADD
        WHERE      Students.StudentID = '%$searchq%'
        AND        HomeADD.StudentID  = '%$searchq%'";
$result = mysqli_query ($conn,$sql);
$count = mysqli_num_rows ($result);
$none = "";

为了测试这个查询,我将$searchq替换为文本J34765,现在它可以工作了。

$sql = "SELECT     Students.StudentID, Students.StudentName, HomeADD.StudentADD
        FROM       Students
        INNER JOIN HomeADD
        WHERE      Students.StudentID = 'J34765'
        AND        HomeADD.StudentID  = 'J34765";
$result = mysqli_query ($conn,$sql);
$count = mysqli_num_rows ($result);
$none = "";

为了进一步测试,我使用echo输出$searchq以确保它被正确捕获。我不明白为什么使用搜索结果的查询不起作用。预期结果如下。

Student ID  Student Name     Student Address
----------  ---------------  -----------------------------------
J34765      John Doe         123 Main Street, Fresno, California
wmomyfyw

wmomyfyw1#

看起来问题在于如何在WHERE部分中使用'%$searchq%'。您应该使用LIKE而不是=。但在这种情况下,您不需要找到模式。只需将=与变量$searchq一起使用,而无需在其周围放置百分号。

$sql = "SELECT     Students.StudentID, Students.StudentName, HomeADD.StudentADD
            FROM       Students
            INNER JOIN HomeADD
            ON         Students.StudentID = HomeADD.StudentID
            WHERE      Students.StudentID = '$searchq'";
    $result = mysqli_query ($conn,$sql);
    $count = mysqli_num_rows ($result);
    $none = "";

或者,如果确实需要搜索模式,请使用LIKE

$sql = "SELECT     Students.StudentID, Students.StudentName, HomeADD.StudentADD
        FROM       Students
        INNER JOIN HomeADD
        WHERE      Students.StudentID LIKE '%$searchq%'
        AND        HomeADD.StudentID  LIKE '%$searchq%'";
$result = mysqli_query ($conn,$sql);
$count = mysqli_num_rows ($result);
$none = "";

相关问题