【问题标题】:PHP, PDO, SQLite INNER JOIN Statement And VariablePHP、PDO、SQLite INNER JOIN 语句和变量
【发布时间】:2019-03-02 04:38:00
【问题描述】:

我需要使用 INNER JOIN 和 WHERE 子句对我的数据库进行 PHP PDO 调用。

在 Navicat GUI 中,这条语句运行良好,我可以看到结果。关于字符串连接的问题在php环境中出现。

我想格式化这个请求,以便它可以被 php 消化:

SELECT * FROM tsourcetb as T INNER JOIN users as U ON U.username = T.username WHERE U.username = $username AND T.username = $username;

我想做什么

$sth = $db->prepare("SELECT * FROM tsourcetb as T INNER JOIN users as U ON U.username = T.username WHERE U.username = $username AND T.username = $username");

返回是一个错误,表示没有带有变量名的表。基本上它将变量作为表的名称返回是一个错误,表明没有具有变量名称的表。基本上它将变量作为表名而不是表名(SELECT * FROM $username)跳出语句的第一部分)。

目的是让表 A 的所有记录,其中用户名字段 = = 表 B 的用户名字段,值从变量传递。 感谢您为实现我的目标提出的任何建议。

更新

php 是神奇的需要尝试和重演。最后请帮助我实现目标:

$username = ($_POST['username']);
$password = ($_POST['password']);

$statement = $db->prepare('SELECT p.* FROM `tsourcetb` as p LEFT JOIN    `users`as s ON p.username = s.username WHERE s.username = :username;');
$statement->bindParam(':username', $username, PDO::PARAM_STR);
$statement->execute();

/* 看这里 -> $statement->fetchall(PDO::FETCH_ASSOC) */

$array_select = $statement->fetchall(PDO::FETCH_ASSOC);
echo json_encode($array_select, JSON_PRETTY_PRINT);

【问题讨论】:

    标签: php pdo sqlite inner-join


    【解决方案1】:
    <?php
    
    
    $sth = $db->prepare("SELECT * FROM `tsourcetb` as T INNER JOIN users as U ON U.username = T.username WHERE U.username = ?  AND T.username = ? ");
    $sth->execute([$username,$username]);
    $results = $sth->fetchall();
    
    
    ?>
    

    用反引号包裹你的表名并使用占位符

    【讨论】:

    • 嗨,感谢您的时间。我有 2 张桌子,在你的例子中只有一张是反引号的。无论如何,什么都没有发生,没有结果被 valorized
    【解决方案2】:

    试试这个:

    $stmt = $db->prepare("SELECT * FROM tsourcetb as T INNER JOIN users as U ON U.username = T.username WHERE U.username = :username AND T.username = :username");
    $stmt->bindValue(':username', $username, PDO::PARAM_STR);
    $stmt->execute();
    

    你需要用prepared statement绑定一个值:

    来源:Docs

    【讨论】:

    • 我得到一个错误:调用未定义的方法 PDO::bindValue()
    • @sundsx 你说得对,我改错了
    【解决方案3】:

    当您使用 PDO 进行动态查询时,您必须绑定参数。 在您的查询中更改此项。

    $username -> :username
    

    在你打电话之前

    $yourQueryObj->bindValue(':username', $username, PDO::PARAM_STR);
    

    这就是为什么准备好的语句比常规变量更安全的原因,因为您在发送查询之前分配了它的类型。

    你可以在这里阅读 http://php.net/manual/en/pdostatement.bindvalue.php

    你应该也可以在这样准备之后使用参数数组执行:

    $sth = execute(array(':username'=> $username));
    

    【讨论】:

    • 调用未定义的方法 PDO::bindParam()
    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多