- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在查询中连接 2 个表以显示结果。
我在第一个表中有 lastname
、firstname
等。
在第二张表中,我有training
、date
...
我在第二个表中还有一个 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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!