所以我的目标是尝试允许页面上的动态元素确定发送到我的数据库的SQL。
第一位是JS,它包含在我的主HTML文档中:
var sub_condition = " AND artist=\'ivoilic\' ";//$(".current_filter").attr("condition");
$("<?php $conditions = 'WHERE owner=\'ivoilic\'"+ sub_condition+"'; include 'PHP/get_info.php';?>").appendTo(".collection tbody");
上面包含的文档get_info.php如下所示:
<?php
include "connect.inc.php";
parse_str($conditions,$test);
$info = mysql_query("SELECT * FROM cards ".$condition.";")or die(mysql_error());?>
我的问题是,当我只是回显SQL它看起来很好,当我手动测试SQL时它工作。但无论出于何种原因,当我尝试使用此方法插入SQL的结尾时,无效。有人有什么想法吗?
答案 0 :(得分:1)
我试着向你展示正确的方向:
<强>第一强>
想想你想在mysql中做什么。谷歌为mysql注入。如果你把mysql查询从客户端(浏览器)带到你的服务器,每个人都可以把它改成像drop database
这样的东西,相信我 - 你不想让别人丢弃你的数据库;)
<强>第二强>
看看这个PHP数据库访问。这是用PDO完成的。 PDO是一个PHP类,它可以防止mysql注入,并且在以后的许多其他情况下也会帮助你。
<?php
$id = $_GET['id'];
$ownerName = $_GET['ownerName'];
$db = new PDO('mysql:host=localhost;dbname=<SOMEDB>', '<USERNAME>', 'PASSWORD');
$query = $db->prepare('SELECT * FROM `cards` WHERE `id` = :ID AND `owner` = :OWNER');
$query->execute(array(
':ID' => $id,
':OWNER' => $owner
));
$result = $query->fetchAll(); //$result is now an array of search result objects
你看,你只需通过javascript将值发送到你的PHP脚本。当然,你的php脚本中可能有几个查询字符串,也许有一个特殊查询ID和交换机的组合?由你决定。
示例:
<?php
$queryNum = (int)$_GET['queryNum'];
$value1 = $_GET['val1'];
$value2 = $_GET['val2'];
switch($queryNum){
case 1:
$query = 'SELECT * FROM `cards` WHERE `id` = :ID AND `owner` = :OWNER';
$queryVals = array(':ID' => $value1, ':OWNER' => $value2);
break;
case 2:
$query = 'SELECT * FROM `cards` WHERE `color` = :COLOR AND `size` = :SIZE';
$queryVals = array(':COLOR' => $value1, ':SIZE' => $value2);
break;
default:
$query = 'SELECT * FROM `cards`';
$queryVals = array();
break;
};
$db = new PDO('mysql:host=localhost;dbname=<SOMEDB>', '<USERNAME>', 'PASSWORD');
$query = $db->prepare($query);
$query->execute($queryVals);
$result = $query->fetchAll(); //$result is now an array of search result objects
<强>第三强>
仅将您的数据库查询的值从javascript或HTML表单发送到您的php脚本。
<强>摘要强>
这是真正的基础知识,我的脚本示例只是可以向您展示正确方向的简单示例。并且永远不要忘记防止用户以任何方式更改数据库查询或php代码的可能性!