簡體   English   中英

如何將結果SQL不同查詢設置為一個或不同變量?

[英]How to set result SQL distinct query to one or different variables?

我正在創建一個移動圖書館應用程序,對於該應用程序的一項功能,我試圖接收某個用戶簽出的所有圖書的bookID 我想能夠echo回從查詢結果中string格式(最好在每個單獨的書ID之間的空格),這樣我就可以在應用程序中處理數據以后。

我在網上找到的許多答案只是簡單地說明了如何執行查詢,但沒有說明之后如何使用數據。 抱歉,如果這是一個簡單的問題,我是一個新手。

<?php
require "conn.php";

$email = $_POST["email"];
$mysql_qry = "SELECT * FROM user_data WHERE email like '$email'";

$mysql_qry2 = "SELECT DISTINCT(bookID) AS bookID FROM books_checked_out 
WHERE userID LIKE $user_id ORDER BY bookID DESC";

$result = mysqli_query($conn, $mysql_qry);

if(mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_assoc($result);
    $user_id = $row["user_id"];
    $result2 = mysqli_query($conn, $mysqlqry2); 
}
else
{
    echo "Error, user name not found";
}

$conn->close;
?>

您可以將結果附加到數組中,並使用implode()顯示值:

<?php
require "conn.php";
$email = $_POST["email"]; // You may test here : if (isset($_POST['email']))
$mysql_qry = "SELECT * FROM user_data WHERE email = '$email'";
$result = mysqli_query($conn, $mysql_qry);
if(mysqli_num_rows($result) > 0)
{
    $row = mysqli_fetch_assoc($result);
    $user_id = $row["user_id"];

    $mysql_qry2 = "SELECT DISTINCT(bookID) AS bookID FROM books_checked_out
                   WHERE userID = $user_id ORDER BY bookID DESC";

    $result2 = mysqli_query($conn, $mysql_qry2);
    if(mysqli_num_rows($result2) > 0)
    {
        $ids = [];
        while ($row = mysqli_fetch_assoc($result2)) {
            $ids[] = $row['bookID'] ;
        }
        echo implode(" ", $ids) ; // print list of ID
    }
    else
    {
        echo "No books checked out!";
    }
}
else
{
    echo "Error, user name not found";
}
$conn->close;

注意 :我在這里使用了您的代碼,但是,您必須查看參數化查詢以防止SQL注入。

  1. 您的查詢$mysql_qry2應該獲取$user_id 之后定義。

  2. 您的LIKE $user_id可以用=代替。

首先,始終清理數據:

$email = filter_var( $_POST['email'], FILTER_SANITIZE_EMAIL );
$user_id = preg_replace( "#[0-9]#", '', $row['user_id'] );

采用

DISTINCT bookID代替DISTINCT(bookID)

從您的查詢中: $mysql_qry2 = "SELECT DISTINCT(bookID) AS bookID FROM books_checked_out WHERE userID LIKE $user_id ORDER BY bookID DESC";

如果您沒有得到任何結果,或者返回的結果為空,但是user_id確實存在,那么我認為查詢格式是錯誤的。

你應該怎么做

  1. 更改ORDER BY :查詢可能是正確的,但是mysql返回了空結果,因為結果順序不匹配。

嘗試這個

"SELECT DISTINCT bookID AS bookID FROM books_checked_out WHERE userID LIKE $user_id ORDER BY userID DESC";

"SELECT DISTINCT bookID AS bookID FROM books_checked_out WHERE userID LIKE $user_id ORDER BY `primary_key_here` DESC";

Replace <strong>`primary_key_here`</strong> with the primary key name.

在沒有條件的情況下運行查詢並檢查結果

$query = mysqli_query( $conn, "SELECT bookID FROM books_checked_out DESC" );

var_dump( $query );

使用結果檢查其余查詢。

您對請求的響應不是使用自己的協議/格式,而是使用JSON或xml之類的東西。

從長遠來看,這將為您提供更好的可維護性,並允許您使用javascript在瀏覽器中輕松處理響應,並且大多數瀏覽器都可以在dev控制台中很好地顯示JSON對象。

您必須從第一個查詢的結果中提取用戶ID,或者可以執行聯接查詢。

$email = validate($POST['email']); //where validate() will try to prevent sql injection 
//joined query
$query = 
  " SELECT bookID FROM user_data 
    INNER JOIN books_checked_out on user_data.user_id = books_checked_out.userID
    WHERE user_data.email='$email'
  ";
//not sure whether that should be user_id or userID looks like you have mixed conventions
//books_checked_out.userID vs user_data.user_id ... check your database column names

//loop through results
// may be empty if user email doesn't exist or has nothing checked out
$result = $conn->query($query);
while($row = $result->fetch_assoc()){
    $response[] = ['bookID'=>$row['bookID']];
}
echo json_encode($response);

在php中收到結果時,您可以使用json_decode()或在javascript / ajax中,結果變量中將自動提供它。

如果事情沒有按預期進行,則最好是回顯實際的sql。 在這種情況下
echo 'SQL IS: '.$query;
並直接針對您的數據庫進行測試(phpmyadmin / MySQL-Workbench),以查看是否得到任何結果或錯誤。

暫無
暫無

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

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