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

问题描述 投票:0回答:3

我需要使用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 pdo sqlite inner-join
3个回答
0
投票
<?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();


?>

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


0
投票

试试这个:

$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


0
投票

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

$username -> :username

在你打电话之前

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

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

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

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

$sth = execute(array(':username'=> $username));
© www.soinside.com 2019 - 2024. All rights reserved.