在另一个查询中使用查询结果

时间:2018-11-23 10:59:07

标签: php mysql

这是我的第一个查询,我想将提取的多个itemID用于另一个查询。

$conn = new mysqli(server, dbuser, dbpw, db);
$email = $_GET['email'];
$querystring = "SELECT itemID from mycart where email = '".$email."' ";
$result = $conn->query($querystring);
$rs = $result->fetch_array(MYSQLI_ASSOC);

需要的第二个查询

$query = "SELECT * from CatalogueItems where itemID = '".$itemID."'";

我如何运行这两个查询?

3 个答案:

答案 0 :(得分:2)

将第一个查询作为第二个查询的子查询:

$query = "SELECT * from CatalogueItems WHERE itemID IN ";
$query .= "(" . $querystring . ")";

这比您当前的方法更好,因为我们只需要单次访问数据库。

请注意,理想情况下,您应该在此处使用准备好的语句。因此,您的第一个查询可能类似于:

$stmt = $conn->prepare("SELECT itemID from mycart where email = ?");
$stmt->bind_param("s", $email);

答案 1 :(得分:1)

首先,您的代码向SQL injection相关攻击开放。请学习使用Prepared Statements

现在,从查询的角度来看,您可以利用JOIN使其成为单个查询:

SELECT ci.* 
FROM CatalogueItems AS ci
JOIN mycart AS mc ON mc.itemID = ci.itemID 
WHERE mc.email = $email  /* $email is the input filter for email */

利用MySQLi库的预处理语句的PHP代码如下:

$conn = new mysqli(server, dbuser, dbpw, db);
$email = $_GET['email'];

$querystring = "SELECT ci.* 
                FROM CatalogueItems AS ci
                JOIN mycart AS mc ON mc.itemID = ci.itemID 
                WHERE mc.email = ?";  // ? is the placeholder for email input

// Prepare the statement
$stmt = $conn->prepare($querystring);

// Bind the input parameters
$stmt->bind_param('s', $email);  // 's' represents string input type for email

// execute the query
$stmt->execute();

// fetch the results
$result = $stmt->get_result();
$rs = $result->fetch_array(MYSQLI_ASSOC);

// Eventually dont forget to close the statement
// Unless you have a similar query to be executed, for eg, inside a loop
$stmt->close();

答案 2 :(得分:0)

这会根据您的结果创建一个变量

$query = "SELECT itemID FROM mycart WHERE email = :email";

$stm = $conn->prepare($query);
$stm->bindParam(':email', $email, PDO::PARAM_STR, 20);
$stm->execute();
$result = $stm->fetchAll(PDO::FETCH_OBJ);
                        foreach ($result as $pers) {
                                $itemID = $pers->itemID;
                        }