【发布时间】:2011-11-06 20:39:25
【问题描述】:
我正在尝试在我的 php 文件中进行 sql 查询调用,这是我的代码:
<?php
$program = $_GET["program"];
$school = $_GET["school"];
$term = $_GET["term"];
$extension = $_GET["extension"];
$con = mysql_connect("127.0.0.1","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("csv_db", $con);
$sql = "SELECT * FROM tbl_name WHERE Dep1= '" . $program . "' AND Dep2= '" . $school . "' AND Dep3= '" . $term . "'";
$result = mysql_query($sql) or die(mysql_error());
echo $sql;
echo "<table id='booklist'><tr>
<th>Edit</th>
<th class='coursename'>Course Name</th>
<th class='startdate'>Start Date</th>
<th class='booktitle'>Book Title</th>
<th class='author'>Book Author</th>
<th class='isbn'>Book ISBN</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>
<td><input type='checkbox'></input></td>
<td class='coursename'>" . $row['Course Name'] . "</td>
<td class='startdate'>" . $row['Start Date'] . "</td>
<td class='booktitle'>" . $row['Book Title']. "</td>
<td class='author'>" . $row['Book Author']. "</td>
<td class='isbn'><input class='ISBN_number' type='text' value='' size='13' maxlength='13'></input></td>
</tr>";
}
echo "</table>";
mysql_close($con);
?>
这个 sql 应该填充一个 html 表,该表将被发送回 ajax 调用。由于某种原因,它不起作用。当我使用普通的“从 tbl_name 中选择 *”时,表格工作得非常好。当我尝试添加一些参数时,它停止工作。现在显示的只是标题(但不是表格形式)。我对调用进行了回显,参数被正确导入到 php 中,我检查以确保列名与我写的一样。
【问题讨论】:
-
您的代码打开了一个与 Jupiter 一样大的 SQL 注入安全漏洞。您应该首先了解安全性:owasp.org
-
您是否尝试过将查询从 PHP 打印到屏幕(在变量插值之后),然后在 MySQL Workbench 中运行以查看它是否在那里工作?您可以在工作台中发布查询和获得的结果吗?
-
在这一行中看起来像
or die(...的情况:$result = mysql_query($sql) or die(mysql_error()); -
当我将它复制到 mysql 工作台时,我刚刚得到了一个可以工作的查询,但要做到这一点,我需要摆脱我的第三个参数。似乎因为我的第三个参数列名中有一个空格,所以它不能正常工作(是的,我现在需要保留这个空间。)我在网上看到某个地方表示你需要的空格,但在名称周围打勾,那也没用……