我试图将使用AJAX接收的两个参数绑定到一个准备好的语句中,使用它们作为比较的术语。当我尝试使用它们时查询出错了,而如果我删除了一个选择获得的那个就可以了。选择是否是失败的可能原因?因为在我执行查询的页面中,字符串正确到达,其值正确。
$.ajax({
url:"ricerca.php",
type: "GET",
data: { azione:"ricerca",
tcr1:$("#testoPrimoCampo").val(),
cr1:$("#primoCampoRicerca").val(),
tcr2:$("#testoSecondoCampo").val(),
cr2:$("#secondoCampoRicerca").val(),
ordinamento: ord},
success:function(result){
alert(result);
$("#risRicerca").html(result);
},
error: function(richiesta,stato,errori){
$("#divElenco").html("<strong>Chiamata fallita:</strong>"+stato+" "+errori);
}
});
<form action="ricerca.php" method="GET">
<fieldset>
<legend>Ricerca calciatori</legend>
<select id="primoCampoRicerca" name="primoCampoRicerca">
<option value="codicecalciatore">Codice</option>
<option value="cognomenome">Cognome e nome</option>
<option value="squadra">Squadra</option>
<option value="ruolo">Tipo</option>
<option value="valore">Valore</option>
</select>
</fieldset>
</form>
<div id = "risRicerca"></div>
ricerca.php
<?php
/*** mysql hostname ***/
$hostname = 'localhost';
/*** mysql username ***/
$username = 'root';
/*** mysql password ***/
$password = '';
/*** database name ***/
$database_name = 'esempio';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$database_name", $username, $password);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
if (isset($_GET['azione'])) {
if (!empty($_GET['tcr1']) && $_GET['tcr1']!='') {
try {
echo($_GET["cr1"]);
$sql = $dbh->prepare("SELECT * FROM calciatori WHERE ? = ?");
$sql->bindParam(1, $_GET['cr1']);
$sql->bindParam(2, $_GET['tcr1']);
$sql->execute();
echo '<table> <tr> <td>Codice</td> <td>Cognome e Nome</td> <td>Squadra</td> <td>Ruolo / Tipo</td> <td>Valore</td> </tr>';
$i = 0;
$res = $sql->fetchAll();
foreach ($res as $row){
$i=$i+1;
echo '<tr>';
echo '<td>' . $row['codicecalciatore'] . '</td>';
echo '<td>' . $row['cognomenome'] . '</td>';
echo '<td>' . $row['squadra'] . '</td>';
echo '<td>' . $row['ruolo'] . '</td>';
echo '<td>' . $row['valore'] . '</td>';
echo '</tr>';
}
echo '</table>';
echo("$i");
/*** close the database connection
$dbh = null;***/
}
catch(PDOException $e)
{
echo $e->getMessage();
}
} else {
echo("Campi vuoti");
$_SESSION['istruzione'] = '';
}
} else {
echo("Azione non settata");
$_SESSION['istruzione'] = '';
}
?>
很抱歉,如果varialbes&#39;名字是意大利语,我希望它不会成为问题,谢谢。
答案 0 :(得分:0)
参数只能用于绑定值,而不能用于名称!
SELECT * FROM calciatori WHERE ? = ?
比较两个值有效,但我认为您希望第一个参数是字段名称。后者不起作用,不应该像这样使用参数。
您可以使用php变量,并确保使用白名单从SQL注入中保存:
$whitelist = array("codicecalciatore" => true, "cognomenome" => true, ...);
if($whitelist[$_GET['cr1']])
{
$sql = "SELECT * FROM calciatori WHERE " . $_GET['cr1'] . " = ?";
}
else
{
die("ERROR: unknown fieldname!");
}