【问题标题】:PHP/Mysql - How can I diplay what is inside query string?PHP/Mysql - 如何显示查询字符串中的内容?
【发布时间】:2014-12-08 09:54:41
【问题描述】:

我的查询有问题。当我var_dump 我的查询时,它显示bool(false)

如何显示完整的查询文本?

PHP:

public function query($string, array $params = array()) {
        $this->count++;
        return mysql_query_params($string, $params);
}
public function updateArticle($article) {
        $rv = $this->db->query("UPDATE ats_Articles SET " .
            "art_CategoryID=$2, art_Title='$3', art_ShortText='$4', art_LongText='$5', art_Ln2BR=$6, art_Language='$7', " . 
            "art_DisplayCountry='$8', art_DateIn=$9, art_DateOut=$10, art_LinkedArt='$11', art_Download='$12', art_Icon='$13', " . 
            "art_IconLarge='$14', art_IconDesc='$15', art_Priority=$16, art_Location='$17', art_Keywords='$18', art_Desc='$19' " .
            "WHERE art_ID=$1;",
            array($article->art_ID, $article->art_CategoryID, $article->art_Title, $article->art_ShortText,
                  $article->art_LongText, $article->art_Ln2BR, $article->art_Language, $article->art_DisplayCountry,
                  $article->art_DateIn, $article->art_DateOut, $article->art_LinkedArt, $article-> art_Download,
                  $article->art_Icon, $article->art_IconLarge, $article->art_IconDesc, $article->art_Priority, $article->art_Location, $article->art_Keywords, $article->art_Desc));
        if ($rv === false ) {
            var_dump($rv); // bool(false)
            return false;
        } else {
            return true;
        }
    }

【问题讨论】:

  • 你能展示一下db->query的方法吗?
  • 在旁注中你应该使用 mysqli。
  • 你用过codeigniter吗??
  • 首先尝试在 phpmyadmin 中触发此查询,如果您的查询中有任何错误,它将告诉您错误。
  • 他想显示查询中的值,因为它们来自查询参数中的数组...

标签: php mysql sql


【解决方案1】:

如果您使用的是 codeigniter,那么$this->db->last_query(); 绝对可以帮助您。

【讨论】:

  • 在这种情况下你必须改变db类的代码来调试sql语句。
  • 既然你在这里使用 mysql_query_params 函数。如果此函数包含 mysql_query 函数,则在执行前回显 sql 查询。
  • 谢谢。你的意思是这样的: echo("$string
    "); print_r($params);退出();
【解决方案2】:

我很确定mysql_query_params这个函数的实现如下,我只是添加了第四个参数(可选)用于调试

 mysql_query_params( $query, $parameters=array(), $database=false, $debug = false )

在您的查询函数中只需调用第四个参数

public function query($string, array $params = array()) {
    $this->count++;
    return mysql_query_params($string, $params, false, true); // the forth is true for debugging
}

当您将第四个参数设置为true 时,该函数将返回包含查询的字符串。

这是你修改的函数

function mysql_query_params__callback( $at ) {
        global $mysql_query_params__parameters;
        return $mysql_query_params__parameters[ $at[1]-1 ];
}
function mysql_query_params( $query, $parameters=array(), $database=false, $debug = false ) {
        // Escape parameters as required & build parameters for callback function
        global $mysql_query_params__parameters;
        foreach( $parameters as $k=>$v )
                $parameters[$k] = ( is_int( $v ) ? $v : ( NULL===$v ? 'NULL' : "'".mysql_real_escape_string( $v )."'" ) );
        $mysql_query_params__parameters = $parameters;

        $query = preg_replace_callback( '/\$([0-9]+)/', 'mysql_query_params__callback', $query);

        if($debug){
            return $query;
        }
        // Call using mysql_query
        if( false===$database )
                return mysql_query( $query );
        else    return mysql_query( $query , $database);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2011-02-07
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2018-10-19
    相关资源
    最近更新 更多