我无法显示要登录的人的名字。
我正试图通过登录的用户显示正确的名称。 这是设置用户名(Gebruikersnaam)的会话:
$_SESSION["USER"] = $result["Gebruikersnaam"];
我正在尝试这样的事情:
$test = $_SESSION['USER'];
$sql = "
SELECT *
FROM klant
WHERE klant.Gebruikersnaam = $test
";
<?php
if(isset($_SESSION['USER'])) {
foreach ($db->query($sql) as $klant){ ?>
<p><span class="glyphicon glyphicon-user"></span><?php echo $klant['Voorletters']. " " .$klant['Tussenvoegsel']. " " .$klant['Tussenvoegsel']; ?></p>
<?php
} } ?>
但这不是解决问题的方法,它会给我以下错误消息:
致命错误:未捕获的PDOException:SQLSTATE [42S22]:找不到列: 1054的'where子句'中的未知列'jan' C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php:55堆栈跟踪:#0 C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php(55):PDO-> query('SELECT * 从k ...')#1 C:\ xampp \ htdocs \ Rent-a-Car \ pages \ auto.php(2): include('C:\ xampp \ htdocs ...')#2 {main}被抛出 C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php,第55行
更新
以下代码有效一半。
$sql = "SELECT * FROM klant WHERE Gebruikersnaam = :name";
$stmt = $db->prepare($sql)
$stmt->execute([':name' => $test]);
$data = $stmt->fetch(\PDO::FETCH_ASSOC);
这可行,但是我现在唯一的问题是:
<?php
if(isset($_SESSION['USER'])) {
foreach ($db->query($data) as $klant){ ?>
<p><span class="glyphicon glyphicon-user"></span><?php echo $klant['Voorletters']. " " .$klant['Tussenvoegsel']. " " .$klant['Tussenvoegsel']; ?></p>
<?php
} } ?>
这会给我这个错误:
警告:PDO :: query()期望参数1为字符串,第61行的C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php中给出的数组
警告:为中的foreach()提供了无效的参数 C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php在第61行
我知道问题出在哪里(它只会给您带来一件事),但我不知道下一步该怎么做,因此我可以为用户获取正确的姓名(Voorletters,Tussenvoegsel)。
答案 0 :(得分:5)
Column not found
表示您正在使用数据库中不存在的某些列名。
问题在这里:
$sql = "SELECT * FROM klant WHERE klant.Gebruikersnaam = $test";
您的$test
值为jan
,它不是列名。因此它需要用引号引起来:[...] = '$test'
,但这是错误/不安全的方式。
对这些查询使用准备好的语句也可以解决SQL注入:
$sql = "SELECT * FROM klant WHERE Gebruikersnaam = :name";
$stmt = $db->prepare($sql)
$stmt->execute([':name' => $test]);
$data = $stmt->fetch(\PDO::FETCH_ASSOC);