繁体   English   中英

php在串联strign以生成mysql查询时添加斜杠

[英]php adds slashes when concatenating strign to generate mysql query

为什么是这样:

$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通过jquery帖子来自select(下拉菜单)元素:

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

我尝试重现您的问题,并且似乎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. 用双引号(“)而不是单引号(')包裹查询,这样var_export不必吐出反斜杠。请按以下步骤操作:

      $ query ='选择使用的日期,从第2卷开始,WHERE名称=“'。$ name。'”'; 

祝你好运

我知道您有magic_quotes_gpc = off,但尝试使用mysql_real_escape_string($ variable)而非$ variable。 如果工作正常,则说明正在发生其他情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM