简体   繁体   中英

mysql creating table - PHP

Problem getting this to work:

I am putting this query string (as a variable):

"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
                )"  

into this loop:

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 />"; 
    }
}

The Database:Query is here:

    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;
    }

It fails to get past:

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

The string it is preparing is here:

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 )

You should remove the \\r and \\n from the query string using str_replace

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

Or you could do the same with preg_replace :

$string = preg_replace('/[\r\n]/', '', $string);

Of course removing linefeed characters is a wrong answer.

It's whole $query = self::$mysqli->real_escape_string( trim( $query ) ); line should be removed instead, as it's shouldn't be used on the whole query in general and practically useless for the prepared queries like this one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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