簡體   English   中英

mysqli_query返回false,因為值包含空格字符

[英]mysqli_query returns false because values contain space charcter

我正在從excel工作表中插入數據,但是我收到錯誤消息,因為值之間包含空格字符,因此似乎已損壞。 據我記得, VARCHAR(200)允許使用空格字符

這是我正在使用的代碼

//CREATE SQL QUERY FOR INSERTING DATA IN DATABASE
    $sql = "INSERT INTO ".$month."_".$year."(";
    foreach($sheetData[1] as $columnName){
        $sql .= preg_replace('#[ ]#', '_',$columnName). ",";
    }
    $sql = rtrim($sql, ',');//REMOVES COMMA FROM END OF THE STRING
    $sql .= ")";
    //
    $sql .= " VALUES((";
    for($i=2;$i < count($sheetData);$i++){
        foreach($sheetData[$i] as $columnName){
            $sql .= $columnName.",";
        }
        $sql = rtrim($sql,',');//
        $sql .= "),";
    }
    $sql = rtrim($sql,',');//
    $sql .= ")";
    echo $sql;
    $query = mysqli_query($conn,$sql) or die(mysqli_error($conn));

After循環是我的SQL QUERY外觀

INSERT INTO December_2015(S_No,Zone,State,City2,VM_Town,Distibutor_Code,Distributor_Name,Dealer_Code,Dealer_Name,Category,Address,Location,Contact,Mobile_No,Visit_1,Visit_2,Visit_3,Visit_4,Visit_5,Visit_6) VALUES( (1,South,Telanagana,Hyderabad,Y,1006704,Sai Santhoshi Enterprises,TG000999,Sree Laxmi Mobiles,A,F4,anthem Arcade,gujarathi Galli,koti ,Koti,Rajesh,8790575680,7-Nov,18-Nov,28-Nov))

您的SQL語法有誤; 在第1行的“ Santhoshi Enterprises,TG000999,Sree Laxmi Mobiles,A,F4,anthem Arcade,gujarathi G”附近,查看與MySQL服務器版本相對應的手冊以使用正確的語法。

它說在'Santhoshi Enterprises ... '附近,之前有一個空格字符

您有兩個“(”,而不是“ VALUES”之后的一個

阿卡什
您不是剛剛才問過一個關於您遇到錯誤的相同/相似代碼的問題,這里是: 如何在變量內部循環

從外觀上看,您通常會編寫混亂的代碼,並且在閱讀/理解錯誤消息時遇到了麻煩。 所以我想你是新來的。

以下是一些適合您的讀物:

綜上所述,這是將您的代碼分解為更易讀的段:

// prepare dummy data
$month = date('M');
$year = date('Y');
$sheetData = array(
    array('data00', 'data01')
    ,array('col1', 'col2', 'col3', 'col4', 'col5', 'col6')
    ,array('data20', "data21")
    ,array('data30', 'data31')
    ,array('data40', 'data41')
);

// prepare vars
$tableName = "{$month}_{$year}";
$dataCount = count($sheetData);

// prepare columns
$columnsSQL = "";
foreach ($sheetData[1] as $columnName) {
    // wrap with ` ticks
    $columnsSQL .= '`'. preg_replace('#[ ]#', '_', $columnName).'`'.',';
}
$columnsSQL = rtrim($columnsSQL, ',');

// prepare values
$valuesSQL = "";
for ($i=2;$i < $dataCount;$i++) {
    foreach($sheetData[$i] as $columnValue){
        $valuesSQL .= "'{$columnValue}', ";
    }
}
$valuesSQL = rtrim($valuesSQL, ', ');

$SQL = "
INSERT INTO {$tableName}( {$columnsSQL} )
VALUES ( {$valuesSQL} )";

最后,您將得到如下結果:

INSERT INTO Nov_2015( `col1`,`col2`,`col3`,`col4`,`col5`,`col6` )
VALUES ( 'data20', 'data21', 'data30', 'data31', 'data40', 'data41' )

附加說明和提示:

  • 考慮到您說的是您正在從excel表中讀取數據...切勿在沒有進行某些測試/檢查/驗證的情況下信任輸入數據。 不僅僅因為安全性,還因為穩定性,總的來說,您不希望事情破裂。 那些excel表可以手動創建,這自動意味着它很容易出現人為錯誤,因此您不能總是100%確定要得到什么。

  • 考慮使用PDO和准備好的語句(出於安全原因,也是一種良好做法)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM