Php 如何使用MYSQLi连接三个表?
我知道以前有人问过这个问题,但我希望有人能帮我解决这个问题,现在是早上5:30,明天到期。我已经到了最后一站了。这是我的密码:Php 如何使用MYSQLi连接三个表?,php,mysql,sql,join,Php,Mysql,Sql,Join,我知道以前有人问过这个问题,但我希望有人能帮我解决这个问题,现在是早上5:30,明天到期。我已经到了最后一站了。这是我的密码: error_reporting(E_ALL); ini_set('display_errors', 1); $db = new mysqli('localhost', 'Brendan', 'password', 'Library'); if($db->connect_errno > 0){ die('Unable to connect to
error_reporting(E_ALL); ini_set('display_errors', 1);
$db = new mysqli('localhost', 'Brendan', 'password', 'Library');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$title = $_GET["title"];
$sql = "SELECT * FROM `BOOK` WHERE `TITLE` like " . $title . " JOIN MANAGES
ON BOOK.SERIAL_NUM = MANAGES.SERIAL_NUMBER JOIN LIBRARIAN
ON MANAGES.ID_NUMBER = LIBRARIAN.ID_NUMBER";
if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
while($row = $result->fetch_assoc()){
echo $row['MANAGES.ID_NUMBER'] . "<br>";
}
当我运行它时,我得到以下信息:
运行查询时出错[您的SQL中有错误]
语法;检查与MySQL服务器版本对应的手册
对于要使用的正确语法,请在BOOK.SERIAL\u NUM上使用“JOIN MANAGES”=
管理第1行的“序列号”]
试一试
SQL中的WHERE应该位于JOIN语句之后
编辑:我编辑的目的是建议这不是一种安全的方法,因为这个主题只涉及SQL中的建议错误,所以我遵循您编写的内容。但请阅读有关SQL注入的内容并更新您的代码 试试看
SQL中的WHERE应该位于JOIN语句之后
编辑:我编辑的目的是建议这不是一种安全的方法,因为这个主题只涉及SQL中的建议错误,所以我遵循您编写的内容。但请阅读有关SQL注入的内容并更新您的代码 MySQL的基本连接格式是:
select ... from A
join B1 on ...
join B2 on ...
...
where ...
因此,请在join语句后放置where,然后重试。MySQL的基本join格式是:
select ... from A
join B1 on ...
join B2 on ...
...
where ...
因此,请将where after join语句放在后面,然后再试一次。首先,where必须位于连接之后,这是正确的。 此外,始终确保保护应用程序不受以下因素的影响,并使用准备好的语句绑定参数:
$sql = 'SELECT * FROM `BOOK` JOIN MANAGES
ON BOOK.SERIAL_NUM = MANAGES.SERIAL_NUMBER JOIN LIBRARIAN
ON MANAGES.ID_NUMBER = LIBRARIAN.ID_NUMBER
WHERE `BOOK`.`TITLE` like ?';
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $title);
$stmt->execute();
$result = $stmt->get_result();
在您的示例中,您可以直接将$title包含在sql查询中,该$title由用户定义,也可以由用户定义。首先,连接之后必须包含where。 此外,始终确保保护应用程序不受以下因素的影响,并使用准备好的语句绑定参数:
$sql = 'SELECT * FROM `BOOK` JOIN MANAGES
ON BOOK.SERIAL_NUM = MANAGES.SERIAL_NUMBER JOIN LIBRARIAN
ON MANAGES.ID_NUMBER = LIBRARIAN.ID_NUMBER
WHERE `BOOK`.`TITLE` like ?';
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $title);
$stmt->execute();
$result = $stmt->get_result();
在本例中,您可以直接在sql查询中包含用户定义的或用户可以定义的$title。顺便说一句:$title=$\u GET[title];+我喜欢的地方$头衔向SQL问好injection@kingkero:您删除了显示数据库查询中存在SQL注入的代码。我同意只显示相关的代码,但我认为这种编辑太多了我喜欢的地方$头衔向SQL问好injection@kingkero:您删除了显示数据库查询中存在SQL注入的代码。我同意只显示相关的代码,但我认为这类编辑太多了。OP,如果你像这样格式化你的查询-那么JOIN和WHERE start new lines-你会发现它更容易阅读。OP,如果你像这样格式化你的查询-那么JOIN和WHERE start new lines-你会发现它更容易阅读。5票赞成。。。当今世界所处的状态……问题是人们通常在受到攻击的直接影响之前并不关心安全。5票赞成。。。当今世界所处的状态……问题是人们通常不关心安全,直到他们受到攻击的直接影响。