为什么:
$query = "SELECT Used, Date FROM table WHERE Name = '".$name."'";
制作:
'SELECT Used, Data FROM table WHERE Name =\'name_value\''
我检查了php.ini并且:
magic_qoutes_gpc = off
magic_quotes_sybase = off
magic_quotes_runtime = off
编辑:
变量$ name来自select(下拉菜单)元素,通过jquery帖子:
$.ajax({
type: "POST",
url: "chart_handler.php",
data: {'volumeName': $('select[name="Volumes"] option:selected').val()},
success: function (results){
//console.log(results);
alert(results);
plotVolumeChart(results);
}
});
在chart_handler.php
我有:
if (isset($_POST['volumeName'])){
$name = $_POST["volumeName"];
// The usual mysql connection stuff, then:
$query = "SELECT `Used`, `Date` FROM `volumes2` WHERE `Name` = '".$name. "'";
用于调试以及我在哪里看到添加的斜线:
file_put_contents( 'output_debug_sql' . time() . '.log', var_export( $query, true));
答案 0 :(得分:1)
我尝试重现你的问题,似乎var_export
正在生成反斜杠,因为它只是用单引号包装输出字符串,如下所示:
var_export( $query);
输出:
'SELECT `Used`, `Date` FROM `volumes2` WHERE `Name` = \'test\''
但是如果你回应变量:
$query = "SELECT `Used`, `Date` FROM `volumes2` WHERE `Name` = '".$name. "'";
echo $query;
这将是输出:
SELECT `Used`, `Date` FROM `volumes2` WHERE `Name` = 'test'
这与预期完全一致。我在您的代码中注意到的另一点是您不需要添加转义引号(`),因此以下查询应该完成这项工作:
SELECT Used, Date FROM volumes2 WHERE Name = 'test';
我建议您在代码中使用phpmyadmin
或MySql Workbench
之前仔细检查您的查询,以确保不遗漏任何内容。
我真的没有看到jQuery部分的任何问题,并且作为概念实现的证明,以下代码段(test.php)在执行AJAX请求并打印时不应生成任何反斜杠结果:
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
</head>
<body>
<?php
if (isset($_POST['volumeName'])){
$name = $_POST["volumeName"];
$query = "SELECT `Used`, `Date` FROM `volumes2` WHERE `Name` = '".$name. "'";
echo $name."<br>";
die();
}
?>
<select name="Volumes">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<div id="result">
</div>
<a href="javascript:submit_onclick()">Submit</a>
<script>
function submit_onclick()
{
$.ajax({
type: "POST",
url: "index.php",
data: {'volumeName': $('select[name="Volumes"] option:selected').val()},
success: function (results){
//console.log(results);
$("#result").html(results);
}
});
}
</script>
</body>
</html>
所以试着:
使用双引号(&#34;)而不是单引号(&#39;)换行查询,这样var_export
就不必吐出反斜杠。这样做:
$query = 'SELECT Used, Date FROM volumes2 WHERE Name = "'.$name. '"';
祝你好运
答案 1 :(得分:0)
我知道你有magic_quotes_gpc = off但是尝试使用mysql_real_escape_string($ variable)而不是$ variable。如果它有效则会发生其他事情。