Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用MYSQLi连接三个表?_Php_Mysql_Sql_Join - Fatal编程技术网

Php 如何使用MYSQLi连接三个表?

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

我知道以前有人问过这个问题,但我希望有人能帮我解决这个问题,现在是早上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 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票赞成。。。当今世界所处的状态……问题是人们通常不关心安全,直到他们受到攻击的直接影响。