php - 无法在 SQL 查询中使用 PHP var

标签 php mysql

我试图显示 userCZ = $_SESSION['user'] 的每一行,但每当我尝试使用 var 时,它什么也找不到。 如果我将 var 替换为文字字符串,它就可以完美工作。 我还尝试检查 var 是否不为空,并且它在脚本开头返回正确的值。 我认为我在语法中遗漏了一些东西,但我尝试过使用 '' 和 ""但仍然不起作用。

<?php
  session_start();
  $userCZ=$_SESSION['user'];


require_once __DIR__ . "/../../init.php";
require_once __DIR__ . "/../../functions/db.php";

if (isset($_GET['start']) && isset($_GET['end'])) {
$stmt = 'SELECT * FROM the_events WHERE userCZ = '$userCZ' AND start_date >= 
:start and end_date <= :end';
$_events = QuickPdo::fetchAll($stmt, [
    'start' => $_GET['start'],
    'end' => $_GET['end'],
]);



$events = [];
foreach ($_events as $e) {
    $events[] = [
        'id' => $e['id'],
        'title' => $e['title'],
        'project' => $e['project'],
        'start' => dateMysqlTime2Iso8601($e['start_date']),
        'end' => dateMysqlTime2Iso8601($e['end_date']),
    ];
}
echo json_encode($events);
}

最佳答案

这可以通过绑定(bind)所有动态值来解决:

$_events = QuickPdo::fetchAll(,
  'SELECT * FROM the_events WHERE userCZ = :userCZ AND start_date >= :start and end_date <= :end',
  [
    'userCZ' => $userCZ,
    'start' => $_GET['start'],
    'end' => $_GET['end'],
  ]
);

除非别无选择,否则请避免使用字符串插值,并且当发生这种情况时,请采取一切可能的预防措施以确保安全地进行。

关于php - 无法在 SQL 查询中使用 PHP var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657284/

相关文章:

php - 使用 .htaccess 文件重定向到另一台服务器失败

php - 哪个更好 : require_once? 或 if (!defined ('FOOBAR' )) require?还是完全不同的东西?

php - Mysql 将数据从一个表插入到另一个选定的行

mysql - Drupal站点: mysql queries not closing and entry resource limit reached

php - 为什么 mysqli QUERY 有效,但相同的 PREPARED 语句版本返回 SQL 语法错误?

php - 如何从 php 获取 JSON 数据并显示到 android 中的 textview?

php - Codeigniter 奇怪的数据库错误

php - 从大 table 中找到匹配项的最佳方法

PHP、MySQL - 结果数组洗牌会比 "select... order by rand()"更快吗?

c++ - QSql数据库 : QMYSQL driver not loadedQSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7