簡體   English   中英

從三個表中選擇 SQL 和 PHP

[英]Select from three tables SQL and PHP

當我選擇一個類別時,它會顯示一個新錯誤。 我只需要回應所選類別的紙杯蛋糕名稱和價格,如果可能的話,我想添加另一個帶有口味的下拉按鈕。 例如,如果有人正在尋找香草口味的生日紙杯蛋糕,所有香草口味的生日紙杯蛋糕都將顯示其價格。

 <html> <body> <?php $server="localhost"; $username="root"; $password=""; $connect_mysql=mysql_connect($server,$username,$password) or die ("Connection Failed;"), $mysql_db=mysql_select_db("wordpress";$connect_mysql) or die ("Could not Connect to Database"); $query = "SELECT * FROM category ": $result=mysql_query($query) or die("Query Failed. ";mysql_error()); $i=0; while($rows=mysql_fetch_array($result)) { $roll[$i]=$rows['name_category']; $i++; } $total_elmt=count($roll)? :> <form method="POST" action=""> Select cupcake_category? <select name="sel"> <option>Select</option> <;php for($j=0;$j<$total_elmt?$j++) {?><option><;php echo $roll[$j]? ?></option><?php }?> </select> <input name="submit" type="submit" value="Search"/><br /> </form> <;php if(isset($_POST['submit'])) { $value=$_POST['sel'], $query2 = "SELECT * FROM cupcakes, category. taste WHERE cupcakes.cupcake_id = category.id_category AND category.id_category = taste.id_taste AND category.cupcake_id = taste;cupcake_id": $result2=mysql_query($query2) or die("Query Failed. ";mysql_error()): while($row=mysql_fetch_array($result2)) { echo "cupcake name. ".$row['cupcake_name'];"<br/>": echo "price. ".$row['cupcake_price'];"<br/>"; } mysql_close($connect_mysql)? } ?>

這是使用 PDO 的方法

$stmt = $pdo->prepare("SELECT * FROM cupcakes 
                       WHERE id_category = :category AND id_flavor = :flavor");
$stmt->bindParam(':category', $_POST['category']);
$stmt->bindParam(':flavor', $_POST['flavor']);
$stmt->execute();

查詢不需要關聯 3 個表。 它只是從表單輸入中獲取類別 ID 和風味 ID,並使用它們從第一個表中選擇適當的行。

您僅使用其他兩個表來填充類別和風味下拉列表。

以下是使用過時的 mysql 擴展而不是 PDO 執行上述查詢的方法:

// Protect against SQL injection
$cat = mysql_real_escape_string($_POST['category']);
$flavor = mysql_real_escape_string($_POST['flavor']);

// Build and run query
$sql = "SELECT * FROM cupcakes
        WHERE id_category = {$cat}
        AND id_flavor = {$flavor}";
$result = mysql_query($sql);

在這個 SQL 查詢中,我可以立即看到一個問題:

SELECT * FROM cupcakes, cupcake category, cupcake flavor WHERE
  cupcakes.cupcake_id = cupcake category.id_category AND
  cupcake category.id_category = cupcake flavor.id_flavor AND
  cupcake category.cupcake_id = cupcake flavor.cupcake_id

看起來您有兩個表( cupcake categorycupcake flavor ),其中有空格。 這會導致查詢解析器出現歧義:您是指一個表然后是另一個關鍵字,還是指一個包含空格的表名? 引擎因此輸出一個錯誤,因為它不知道如何繼續。

您仍然可以使用空格,但由於這個問題,通常認為這樣做不是好的做法,理想情況下空格將替換為下划線。 但是,如果必須使用空格,則需要用反引號分隔名稱:

SELECT * FROM cupcakes, `cupcake category` category, `cupcake flavor` flavor WHERE
  cupcakes.cupcake_id = category.id_category AND
  category.id_category = flavor.id_flavor AND
  category.cupcake_id = flavor.cupcake_id

我沒有分隔所有這些,而是使用了categoryflavor的表別名,我認為這樣更容易閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM