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

时间:2018-09-26 11:50:31

标签: 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的所有记录的用户名字段= =到表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);

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用PDO进行动态查询时,必须绑定参数。 在查询中更改它。

$username -> :username

在拨打电话之前

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

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

您可以在此处阅读有关内容 http://php.net/manual/en/pdostatement.bindvalue.php

像这样准备后,您还应该可以使用参数数组来执行:

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

答案 2 :(得分: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();


?>

用反引号包装您的表名,并使用占位符