php在连接strign时添加斜杠以生成mysql查询

时间:2015-12-01 21:30:42

标签: php mysql

为什么:

$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));

2 个答案:

答案 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';

我建议您在代码中使用phpmyadminMySql 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>

所以试着:

  1. 删除转义引号(```)并查看问题是否已解决。
  2. 使用双引号(&#34;)而不是单引号(&#39;)换行查询,这样var_export就不必吐出反斜杠。这样做:

    $query = 'SELECT Used, Date FROM volumes2 WHERE Name = "'.$name. '"';
  3. 祝你好运

答案 1 :(得分:0)

我知道你有magic_quotes_gpc = off但是尝试使用mysql_real_escape_string($ variable)而不是$ variable。如果它有效则会发生其他事情。