gpt4 book ai didi

php - mysql SELECT(需要连接到 2 个表并显示搜索结果)

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:00 24 4
gpt4 key购买 nike

我想在查询中连接 2 个表以显示结果。
我在第一个表中有 lastnamefirstname 等。
在第二张表中,我有trainingdate...

我在第二个表中还有一个 ID 引用,将姓氏和名字链接到培训和日期。
因此,每当我在数据库中创建培训记录时,它都会为同一个人使用相同的 ID。
如果我搜索 lastname,我希望能够连接我的查询中的两个表并显示结果。
如果我在出现的搜索中单击名称,它还会列出他们已完成的所有培训。
我是 MySQL 数据库的新手。
我正在为 MySQL 使用 phpmyadmin 并运行本地主机数据库以进行测试...
我目前可以搜索单个表并显示结果,但我无法找出联合来链接它们并将名称列表作为链接来显示那里的培训。并让它在打印输出的顶部保留名称...这是我从教程中获得的代码。

    <form>
<div align="right">
<input type="button" value="Print Results" onClick="myprint()">
</div>
</form>
<?php

// TAKE THE INFORMATION FROM FORM.
$search = $_GET['search'];

// IF THERE IS NOT A KEYWORD GIVE AN ERROR
if (!$search)
echo "You didn't enter a keyword";
else
{
echo "<td>You searched for: <strong>$search </strong></td>";
mysql_connect('localhost','loginid','password');
mysql_select_db('trainingrecords');
$id=@$_GET['id'];

//QUERY IS THE CODE WHICH WILL MAKE THE SEARCH IN YOUR DATABASE.
//I WROTE AN EXPLANATION ABOUT IT AFTER THE CODE.
$query="SELECT * FROM username
WHERE MATCH( lastname, firstname, location, created)
AGAINST('%$search%' IN BOOLEAN MODE)";
$result1 = MySQL_query($query);
if(!$result1) {
echo MySQL_error()."<br>$query<br>";
}
if (MySQL_num_rows($result1) > 0) {
echo "<table width='750' align='center' border='1'
cellspacing='2' cellpadding='2'>";
while($result2 = MySQL_fetch_array($result1)) {

//A short description from category.
$description = $result2['location'];
$searchPosition = strpos($description, $search);
$shortDescription = substr($description, $searchPosition, 150);

echo "<td><strong>{$result2['lastname']}
{$result2['firstname']}</td></strong><td>
$shortDescription</td><td>{$result2['created']}</td><tr/>";
}
echo "</table>";
} else {
echo "No Results were found in this category.<br>";
}
echo "<br>";
}
?>

最佳答案

1- 你有一个 SQL 注入(inject)漏洞
确保使用 mysql_real_escape_string
转义所有变量并在查询中正确引用字符串 _(否则 mysql_real_escape_string 将不起作用)_

$search = mysql_real_escape_string($GET['search']);
....
$query="SELECT * FROM username
WHERE MATCH( lastname, firstname, location, created)
AGAINST('%".$search."%' IN BOOLEAN MODE)";
// ^ ^ quotes were already there, good!

2- 如果您想从多个表中获取结果,则必须进行联接

$search = "SELECT u.*, t.* FROM username u
INNER JOIN training t ON (u.id = t.user_id)
WHERE MATCH( lastname, firstname, location, created)
AGAINST('%".$search."%' IN BOOLEAN MODE)";

通常您不想选择所有字段,如果您明确说明要向用户显示的字段,查询将运行得更快。

这里有一个关于 php 和 MySQL 的不错的教程:http://www.tizag.com/mysqlTutorial/
如果您有 SQL 注入(inject)漏洞,会发生以下情况:How does the SQL injection from the "Bobby Tables" XKCD comic work?

关于php - mysql SELECT(需要连接到 2 个表并显示搜索结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7190619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com