我目前正在一个有upvote系统的论坛网站上工作。然而,有一些烦人的,可能是语法错误,这些错误让我烦恼。我在谈论这段代码。
<?php
session_start();
include_once 'dbh_discussion.inc.php';
$conn = db_discussion_connect();
$thread_id = $_POST['upvote'];
$sql1 = $conn->prepare("SELECT * FROM users WHERE user_id = '$_SESSION['u_id']' AND thread_id = '$thread_id'");
这段代码中不清楚的事情如下:
我在服务器上调试时遇到的错误:
解析错误:语法错误,意外&#39;&#39; (T_ENCAPSED_AND_WHITESPACE), 期待&#39; - &#39;或标识符(T_STRING)或变量(T_VARIABLE)或 /var/www/html/includes/thread_upvotes.inc.php中的数字(T_NUM_STRING) 第9行
我觉得我错过了一些语法上的东西。无论如何,我真的很感激有人告诉我这里出了什么问题。
由于
答案 0 :(得分:3)
我被这些人提供了如此强烈的触发,他们提供了对注射仍然很开放的答案。是否难以将他准备好的陈述改为安全的东西?!!!
这是一个具有正确准备语句的解决方案。好像重写它需要很长时间。这应该违反这里的规则。
<?php
session_start();
include_once 'dbh_discussion.inc.php';
$conn = db_discussion_connect();
$sql1 = $conn->prepare("SELECT * FROM users WHERE user_id = :uid AND thread_id = :tid");
$sql1->bindParam(':uid', $_SESSION["u_id"]);
$sql1->bindParam(':tid', $_POST['upvote']);
$sql1->execute();
答案 1 :(得分:1)
您的代码有错误,特别是代码user_id = '$_SESSION['u_id']'
,请尝试以下操作:
$sql1 = $conn->prepare("SELECT * FROM users
WHERE user_id = '{$_SESSION['u_id']}' AND thread_id = '$thread_id'");
要在字符串中插入数组键,如果在{ }
中指定了键,则必须将其括在' '
中
警告直接在查询中插入$_SESSION
,您有资格获得SQL Injection !!!
插入它们的正确和更好的方法是将每个像这样绑定:
$sql1 = $conn->prepare("SELECT * FROM tableName WHERE fieldID = :id");
$sql1->bindParam(':id', $_SESSION["id"]);
答案 2 :(得分:0)
似乎引用了问题,请尝试如下,
$uid = $_SESSION['u_id'];
$sql1 = $conn->prepare("SELECT * FROM users WHERE user_id = '$uid' AND thread_id = '$thread_id'");