我想獲得一定的「$ _SESSION」變量從另一PHP頁面SQL查詢的名字,我不斷收到錯誤..
場景是,如果我爲某個頁面輸入評論,我希望該頁面的名稱進入數據庫。 (請參閱下面的屏幕截圖) 如果我提交評論,我希望名稱'SEDGLEY PK ...'等存儲在數據庫中。
下面是頁面的代碼:(enter_review.php)
$value1 = $_POST['review'];
$value2 = $_SESSION['id'];
$value3 = $date = date("Y-m-d");
$value4 = $_POST['rating'];
$value5 = $_SESSION['SUBURB'];
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO dog_parks.reviews (review_text, username, date, rating, item)
VALUES ('$value1', '$value2', '$value3', '$value4', '$value5')";
// use exec() because no results are returned
$conn->exec($sql);
echo "Review Successful";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
header("refresh:20; url=index.php");
?>
我懷疑在$ value5變量上有什麼不對...
下面是該審查進入瀏覽網頁的代碼..
<?php
if (isset($_GET['suburb']))
{
$_SESSION["SUBURB"] = $_GET['suburb']; ?>
<!-- PRINTING DOG PARK NAME -->
<h1><?php echo $_SESSION["SUBURB"]; ?></h1>
<table border="1" cellspacing="5" cellpadding="5" width="100%">
<thead>
<tr>
<th>Park Name</th>
<th>Street</th>
<th>Suburb</th>
<th>Dog Park Area (m2)</th>
</tr>
</thead>
<tbody>
<?php
$result = $conn->prepare("SELECT * FROM dog_parks.items where dog_park_name = $_SESSION[SUBURB]");
$result->execute();
for($i=0; $row = $result->fetch(); $i++){
?>
<tr>
<td><label><?php echo $row['Park_Name']; ?></label></td>
<td><label><?php echo $row['Street']; ?></label></td>
<td><label><?php echo $row['Suburb']; ?></label></td>
<td><label><?php echo $row['Dog_Park_Area_(m2)']; ?></label></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
}
您正在運行到的東西,這將是在生產現場一個SQL注入點。使用準備好的語句,你應該沒問題。 – Sirko
我不擔心SQL注入在這個時間點,我只需要進入數據庫的工作,比我最終會得到它!但是沒有回答我的問題。 – deluxenathan
該問題具有相同的原因:如果我正確讀取了屏幕截圖,則最後一個參數有兩個引號,在此情況下會將其分開。準備好的陳述不會發生。 – Sirko