【问题标题】:PHP Variable Passing not working in database callPHP变量传递在数据库调用中不起作用
【发布时间】:2009-08-05 15:36:42
【问题描述】:

这行得通。

function get_distinct_size_for_bracelets() {
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='plastic' ORDER BY size";
}

这不起作用并停止 php 死机且不报告错误。

 function get_distinct_size_for_bracelets($myvalue) {
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type=".$myvalue." ORDER BY size";
}

我尝试了许多配置,但没有任何效果。

【问题讨论】:

    标签: php mysql parameter-passing


    【解决方案1】:
    function get_distinct_size_for_bracelets($myvalue) {
        $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size";
    }
    

    您仍然需要在 SQL 查询中使用单引号。

    【讨论】:

    • 谢谢。就是这样。我在使用数组的数据库调用中的其他地方有单引号。所以我不知道为什么这个调用需要不同的语法。
    • 我想你可能误解了编辑。如果 $myvalue 等于“foo”,使用您的原始脚本,SQL 将变为“type=foo”,在 SQL 中这意味着“类型属性等于 foo 属性”。通过我的编辑,SQL 变为“type='foo'”,这意味着“type 属性等于字符串 'foo'”。
    【解决方案2】:

    记得引用传递的值:

    function get_distinct_size_for_bracelets($myvalue) 
    { 
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type=".$myvalue." ORDER BY size";
    }
    

    应该是:

    function get_distinct_size_for_bracelets($myvalue) 
    { 
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size";
    }
    

    注意type 处添加的单引号。

    【讨论】:

      【解决方案3】:

      你仍然需要单引号。所以

      $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size";
      

      【讨论】:

        【解决方案4】:

        你没有逃避你的价值,你忘记了你的单引号,这是我的猜测。试试:

        function get_distinct_size_for_bracelets($myvalue) { 
            $query = sprintf("SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='%s'  ORDER BY size",
                mysql_real_escape_string($myvalue));
        }
        

        这允许您将转义值传递到字符串中,而不是使用连接。

        【讨论】:

          【解决方案5】:

          试试

          function get_distinct_size_for_bracelets($myvalue) {
              $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size";
          }
          

          【讨论】:

            【解决方案6】:

            MySQL 也有不同的数据类型。 strings 也需要用引号括起来:

            $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size";
            

            或者更好地使用mysql_real_escape_string function:

            $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".mysql_real_escape_string($myvalue)."' ORDER BY size";
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-03-23
              • 2017-10-18
              • 1970-01-01
              • 1970-01-01
              • 2016-09-01
              • 1970-01-01
              • 2015-02-15
              • 1970-01-01
              相关资源
              最近更新 更多