Php 这个PDO代码有效吗?

Php 这个PDO代码有效吗?,php,sql,pdo,Php,Sql,Pdo,我从我的代码中提取了这段代码,因为我担心有更好的方法可以做到这一点。我希望有人能帮助我或者给我指出正确的方向 基本上,这段代码检查数据库中的许多表,并检查结果是否返回 $stmt = $conn->prepare('SELECT email FROM 1table WHERE email = :email'); $stmt = $conn->prepare('SELECT email FROM 2table WHERE email = :email'); $

我从我的代码中提取了这段代码,因为我担心有更好的方法可以做到这一点。我希望有人能帮助我或者给我指出正确的方向

基本上,这段代码检查数据库中的许多表,并检查结果是否返回

    $stmt = $conn->prepare('SELECT email FROM 1table WHERE email = :email'); 
    $stmt = $conn->prepare('SELECT email FROM 2table WHERE email = :email');
    $stmt = $conn->prepare('SELECT email FROM 3table WHERE email = :email'); 
    $stmt->bindParam(':email', $email);
$stmt->execute();
    if($stmt->fetch(PDO::FETCH_NUM) > 0){

有更好的办法吗?或者更有效的方法,它可以告诉我在哪个表中找到结果?

这是有效的PHP,但您的逻辑无效:

$stmt = $conn->prepare('SELECT email FROM 1table WHERE email = :email'); 
$stmt = $conn->prepare('SELECT email FROM 2table WHERE email = :email');
$stmt = $conn->prepare('SELECT email FROM 3table WHERE email = :email');
您不断用新值覆盖
$stmt
。这意味着
$stmt
将只包含最后一条prepare语句

您可以查看
UNION
并按如下方式修改代码:

$sql = '(SELECT email FROM 1table WHERE email = :email)'; 
$sql .= 'UNION ALL'; 
$sql .= '(SELECT email FROM 2table WHERE email = :email)'; 
$sql .= 'UNION ALL'; 
$sql .= '(SELECT email FROM 3table WHERE email = :email)'; 
$stmt = $conn->prepare($sql);

它是有效的PHP,但您的逻辑无效:

$stmt = $conn->prepare('SELECT email FROM 1table WHERE email = :email'); 
$stmt = $conn->prepare('SELECT email FROM 2table WHERE email = :email');
$stmt = $conn->prepare('SELECT email FROM 3table WHERE email = :email');
您不断用新值覆盖
$stmt
。这意味着
$stmt
将只包含最后一条prepare语句

您可以查看
UNION
并按如下方式修改代码:

$sql = '(SELECT email FROM 1table WHERE email = :email)'; 
$sql .= 'UNION ALL'; 
$sql .= '(SELECT email FROM 2table WHERE email = :email)'; 
$sql .= 'UNION ALL'; 
$sql .= '(SELECT email FROM 3table WHERE email = :email)'; 
$stmt = $conn->prepare($sql);

这将只使用最后一个查询。您可以这样做:

$stmt = $conn->prepare('
    (SELECT email FROM 1table WHERE email = :email)
    union all
    (SELECT email FROM 2table WHERE email = :email)
    union all
    (SELECT email FROM 3table WHERE email = :email)'); 

这将只使用最后一个查询。您可以这样做:

$stmt = $conn->prepare('
    (SELECT email FROM 1table WHERE email = :email)
    union all
    (SELECT email FROM 2table WHERE email = :email)
    union all
    (SELECT email FROM 3table WHERE email = :email)'); 

以前的Anwser都没有告诉您如何知道数据来自哪个talbe。因此,如果这是相关的,则这是正确的
联合

$sql  = "SELECT email, '1table' as fromTable  FROM 1table WHERE email = :email"; 
$sql .= " UNION ALL"; 
$sql .= " SELECT email, '2table' FROM 2table WHERE email = :email"; 
$sql .= " UNION ALL"; 
$sql .= " SELECT email, '3table' FROM 3table WHERE email = :email"; 

以前的Anwser都没有告诉您如何知道数据来自哪个talbe。因此,如果这是相关的,则这是正确的
联合

$sql  = "SELECT email, '1table' as fromTable  FROM 1table WHERE email = :email"; 
$sql .= " UNION ALL"; 
$sql .= " SELECT email, '2table' FROM 2table WHERE email = :email"; 
$sql .= " UNION ALL"; 
$sql .= " SELECT email, '3table' FROM 3table WHERE email = :email"; 

您一直在覆盖
$stmt
变量,因此唯一要进行的查询(根据我的经验)是last@WesleySchleumer能告诉我哪个表包含结果吗?创建一个伪列,它将告诉您结果来自哪里<代码>选择电子邮件,“3表”作为“容器”…谢谢!我将看一看关于您不断覆盖
$stmt
变量的一些教程,因此要继续进行的唯一查询(根据我的经验)是last@WesleySchleumer能告诉我哪个表包含结果吗?创建一个伪列,它将告诉您结果来自哪里<代码>选择电子邮件,“3表”作为“容器”…谢谢!我会看一些关于这方面的教程,也许一次看一个?在每次之后执行以查看结果是否存在?或者这太费时了?也许一次一个?在每次之后执行以查看结果是否存在?或者这太费时了?你能解释一下我怎么知道结果来自哪里吗
fromTable
将保存它,但我如何检查?
$fieldArr=$stmt->fetch(PDO::fetch\U ASSOC)这将给出一个包含所有字段的关联数组,如果没有更多行可供提取,则为false!但是,它无法返回数组中的多个实例,这对我来说不是必需的,所以这是最好的方法!你能解释一下我怎么知道结果来自哪里吗
fromTable
将保存它,但我如何检查?
$fieldArr=$stmt->fetch(PDO::fetch\U ASSOC)这将给出一个包含所有字段的关联数组,如果没有更多行可供提取,则为false!但是,它无法返回数组中的多个实例,这对我来说不是必需的,所以这是最好的方法!