【问题标题】:mysql creating table - PHPmysql 创建表 - PHP
【发布时间】:2013-01-03 16:56:40
【问题描述】:

让它工作的问题:

我把这个查询字符串(作为一个变量):

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

数据库:查询在这里:

    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 )

【问题讨论】:

    标签: php mysqli create-table


    【解决方案1】:

    您应该使用str_replace 从查询字符串中删除\r\n

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

    或者你可以对preg_replace做同样的事情:

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

    【讨论】:

    • 意味着你什么时候做的,但我不能,因为我必须等 4 分钟。谢谢提醒:)
    【解决方案2】:

    当然,删除换行符是错误的答案。

    应该删除整个$query = self::$mysqli-&gt;real_escape_string( trim( $query ) ); 行,因为它通常不应该用于整个查询,并且对于像这样的准备好的查询实际上无用。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2014-02-25
      • 1970-01-01
      • 2015-06-20
      • 2019-06-01
      • 1970-01-01
      • 2013-03-01
      • 2011-12-09
      • 2012-01-27
      相关资源
      最近更新 更多