我将以下脚本(取自大型脚本)保存为example3.php:
<script type="text/javascript">
var layer;
//where layer is a table like
------------------------------------
BUSNAME + Category +
------------------------------------
200 Bay + Restaurant +
201 Bay + Bank +
202 Bay + School +
203 Bay + Restaurant +
204 Bay + School +
205 Bay + Restaurant +
206 Bay + Restaurant +
207 Bay + School +
208 Bay + Restaurant +
209 Bay + Restaurant +
------------------------------------
window.location.href = "example3.php?layer="+ layer;
<?php
//Make a MySQL Connection
$query = "SELECT Category, COUNT(BUSNAME)
FROM ".$_GET['layer']." GROUP BY Category";
$result = mysql_query($query) or die(mysql_error());
//Print out result
while($row = mysql_fetch_array($result)){
echo "There are ".$row['COUNT(BUSNAME)']. " " .$row['Category']. "items.";
echo "<br/>";
}
?>
</script>
不要为什么它不起作用。任何建议必须得到赞赏。
答案 0 :(得分:4)
如果您有动态表名,您的数据库设计错误
至于你的脚本,它没有任何意义。
分两部分:JS页面和PHP页面。并使用window.location.href
调用此PHP页面答案 1 :(得分:1)
我建议在客户端(在JS中)对表进行JSON编码。使用POST发送它,然后在服务器端解码(在PHP中)。
大多数流行的JS库都有JSON编码函数,PHP函数名为json_decode。
答案 2 :(得分:0)
正如Balus指出的那样,请注意SQL注入。当你到达php页面时,$_GET['layer']
是否等于什么?
你的javascript变量是否等于某些东西?
var layer = "layer
“layer”是数据库中表的实际名称。
答案 3 :(得分:-1)
修改强>
在此上下文中mysql_real_escape_string()
不起作用。
$layer = mysql_real_escape_string($_GET['layer']);
$query = "SELECT Category, COUNT(BUSNAME)
FROM `".$layer."` GROUP BY Category"; <<-- this doesn't work.
因为mysql_real_escape_string没有转义反引号`
使用值确实有效
您需要通过mysql_real_escape_string()运行$_GET
获得的每个值。 (或使用PDO)
除此之外,您需要将每个值放入查询中,并使用单引号'
括起来。
$value = mysql_real_escape_string($_GET['fieldname']);
$query = "SELECT * FROM test WHERE f1 = '".$value."'"; <<-- this works
^ ^
链接:
SQL注入攻击:How does the SQL injection from the "Bobby Tables" XKCD comic work?
PDO:mysqli or PDO - what are the pros and cons?
一旦找到修复您特定的SQL注入问题,就会立即更新。