0

これを機能させる際の問題:

私はこのクエリ文字列を(変数として)入れています:

"query" => 
            "CREATE TABLE 
                users(
                    id INT NOT NULL AUTO_INCREMENT  PRIMARY KEY,
                    date_created DATETIME,     
                    last_active DATETIME,
                    last_logged_in DATETIME,
                    first_name VARCHAR(255),
                    last_name VARCHAR(255),
                    email VARCHAR(255), 
                    password VARCHAR(255),  
                    permissions INT,  
                    status SMALLINT
                )"  

このループに:

foreach( $queryStrings as $queryString )
{  
    $query = Database::Query( $queryString[ "query" ] );
    if( $query )
    {
        echo "Database table " . $queryString[ "name" ] . " successfully created<br />"; 
    }
    else
    {     
        echo "Database table " . $queryString[ "name" ] . " failed to create<br />"; 
    }
}

Database:Queryはここにあります:

    public static function Query( $query )
    {
        $query = self::$mysqli->real_escape_string( trim( $query ) );  

        if ( $query = self::$mysqli->prepare($query) ) 
        {
            $query->execute();   

            $DatabaseQuery = new DatabaseQuery();
                $DatabaseQuery->result = $query->get_result();       
                $DatabaseQuery->mysql_num_rows = $query->num_rows();                 
                $query->close();
                return $DatabaseQuery;                   
        }          

        echo false;
    }

それは通り抜けることができません:

if ( $query = self::$mysqli->prepare($query) ) 

それが準備している文字列はここにあります:

CREATE TABLE \r\n users(\r\n id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\r\n date_created DATETIME, \r\n last_active DATETIME,\r\n last_logged_in DATETIME,\r\n first_name VARCHAR(255),\r\n last_name VARCHAR(255),\r\n email VARCHAR(255), \r\n password VARCHAR(255), \r\n permissions INT, \r\n status SMALLINT\r\n )
4

2 に答える 2

0

を使用してクエリ文字列から\randを削除する必要があります\nstr_replace

 $string = str_replace(array("\n", "\r"), '', $string);

または、次のように同じことを行うことができますpreg_replace:

$string = preg_replace('/[\r\n]/', '', $string);
于 2013-01-03T17:04:52.937 に答える
0

もちろん、改行文字を削除するのは間違った答えです。

$query = self::$mysqli->real_escape_string( trim( $query ) );一般にクエリ全体で使用するべきではなく、このような準備されたクエリでは実際には役に立たないため、代わりに行全体を削除する必要があります。

于 2013-01-08T07:50:41.200 に答える