在php中显示相关表中的数据

在php中显示相关表中的数据,php,mysql,database,Php,Mysql,Database,我有两张桌子,一张是书,另一张是作家。它们通过一对多关系关联,即writer中的主键,即w_id是由b_writer命名的书籍中的外键。但是,当我在php脚本中打印b_writer时,它会打印id,即一个数字,但我需要编写器的名称。我怎么做 $connect = mysqli_connect("localhost", "root", "", "ecom"); $query = "SELECT * FROM books WHERE b_id = '".$_POST["book_id"]."'"

我有两张桌子,一张是书,另一张是作家。它们通过一对多关系关联,即writer中的主键,即w_id是由b_writer命名的书籍中的外键。但是,当我在php脚本中打印b_writer时,它会打印id,即一个数字,但我需要编写器的名称。我怎么做

$connect = mysqli_connect("localhost", "root", "", "ecom");  
$query = "SELECT * FROM books WHERE b_id = '".$_POST["book_id"]."'";  
$result = mysqli_query($connect, $query);
    while($row = mysqli_fetch_array($result))  
{  
    echo $row["b_id"] $row["b_desc"] $row["b_name"] $row["b_writer"];
}
当我打印
b_writer

使用join时,如何打印writer的名称

更改您的查询

select a.*,b.* from book as a inner join writer b on a.b_id = b.id where b_id = '".$_POST["book_id"]."'

您应该使用联接从两个表中获取数据,例如:

"SELECT b.*, w.* 
 FROM books as b
 INNER JOIN writer as w on b.b_writer = w.w_id
 WHERE b_id = '".$_POST["book_id"]."'"; 
但是在查询中使用var时要小心,因为您有sqlinjection的风险

为了避免这种情况 您应该使用prepare语句和binding参数,例如:

$stmt = $db->prepare("SELECT b.*, w.* 
  FROM books as b
  INNER JOIN writer as w on b.b_writer = w.w_id
  WHERE b_id =?");
$stmt->bind_param("i",$_POST["book_id"] );
$stmt->execute();

您需要一个连接:所有查询仍然显示编写器的id,而不是其名称