2016-06-08 62 views
-2

這是我的代碼的簡化版本。我試圖達到的是,我想插入圖像路徑到數據庫表。我使用了常量DIRECTORY_SEPERATOR,我也使用PDO。沒有斜槓存儲在mysql表

$tmp = $_FILES['file1']['tmp_name']; 
$name = $_FILES['file1']['name']; 
$path = getcwd() . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $name; 



$success = move_uploaded_file($tmp, $path); 


if($success){ 
    $query = "INSERT INTO phptbl (Name, Photo) VALUES ('name', '$path')"; 
    $db->exec($query); 
}else{ 
    echo 'Something went wrong!'; 
} 

將數據插入到表格中而不進行目錄分離。

請告知

+0

「DIRECTORY_SEPERATOR」是您系統上的反斜槓嗎? – deceze

+0

是的,我正在使用Windows –

回答

4

如果DIRECTORY_SEPERATOR\您的系統上,你正在用反斜槓創建一個字符串。反斜槓是許多語言中的轉義字符,包括SQL。該數據庫將把\解釋爲元字符。要正確存儲任何和所有任意值,你需要或者正確地逃脫值(以\\),或者更好,準備和綁定查詢:

$stmt = $db->prepare("INSERT INTO phptbl (Name, Photo) VALUES ('name', ?)"; 
$stmt->execute([$path]); 

這將正確地保留特殊字符是沒有他們得到解釋。

0

使用準備好的查詢,它會保護你從用斜槓,報價等特殊字符

問題

嘗試下一個:

$tmp = $_FILES['file1']['tmp_name']; 
$name = $_FILES['file1']['name']; 
$path = getcwd() . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $name; 



$success = move_uploaded_file($tmp, $path); 


if($success){ 
    $query = "INSERT INTO phptbl (Name, Photo) VALUES ('name', :path)"; 
    $stmt = $db->prepare(); 
    $stmt->execute([':path' => $path]); 
}else{ 
    echo 'Something went wrong!'; 
} 
+3

OP爲什麼要「嘗試」這個?一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。 –