PHP,PDO,SQLite INNER JOIN语句和变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP,PDO,SQLite INNER JOIN语句和变量相关的知识,希望对你有一定的参考价值。

我需要使用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的所有记录(其中username字段为=)到表B的用户名字段,并从变量传递值。感谢任何有关实现目标的建议。

UPDATE

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


$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();


?>

用反引号包装你的表名,也使用占位符

另一答案

试试这个:

$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();

您需要使用预准备语句绑定值:

资料来源:Docs

另一答案

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

$username -> :username

在你打电话之前

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

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

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

您应该能够在准备之后执行参数数组:

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

以上是关于PHP,PDO,SQLite INNER JOIN语句和变量的主要内容,如果未能解决你的问题,请参考以下文章

是否应该在 SQLite 中使用 GROUP BY 在 UNION 上进行 INNER JOIN 花费数小时?

如何使用多个 INNER JOIN 加快查询速度

pdo sqlite 找不到驱动程序... php 文件未处理

在 PHP 中设置 SQLite3 PDO 驱动程序

PHP SQLite PDO - 更改为静态

如何在 php 中启用 sqlite3 的 PDO 驱动程序?