2017-08-28 86 views
0

我有一個腳本從MySQL db數據單元中的varchar字段獲取數據,如果滿足某些條件,則將其添加到另一個。在varchar字段中丟失前導0

然而,當數據是一個低於10的數字,它在原始字段中被標記爲前導零(例如08)時,它會將其保存到新單元格中作爲「8」,從而導致我進一步出現各種問題下線。

我知道查詢選擇數量保持前導零 - 當我運行此有事:

 $query = "INSERT INTO gpvwc_DBSW.engine_allocation SET 
     team_id=".$team_id.", 
     car=2, 
     event=".$nextEvent.", 
     engine=".$previousengine2.", 
     driver=".$Car2nr."; 
     "; 

與數的變量;「$ Car2nr。」我知道接收單元支持前導零,因爲其他查詢導致它沒有問題,但已經兩年了,這真的是我的頭腦。任何幫助表示讚賞!

+2

嘗試添加引號'司機=」 ';' – questlooking

+2

ahhhhh!您需要使用PDO或mysqli準備的查詢 – cmorrissey

+2

儘管該列可能是一個字符串,但您將其作爲整數傳入,因爲沒有引號。使用預準備語句和參數綁定([PDO](https://secure.php.net/manual/en/pdo.prepared-statements.php)或[mysqli](http://php.net/manual/en/) mysqli.quickstart.prepared-statements.php)),你可以指定它是一個字符串。 – aynber

回答

1
driver=".($Car2nr<10 ? str_pad($Car2nr, 2, "0", STR_PAD_LEFT) :$Car2nr) .", 
0

任何使用PDO前總是有一個0。如果您沒有使用像ORM一樣的教條或者使用PHP框架打包的教程,那麼您應該使用PDO。

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'username', 'password'); 
$stmt = $db->prepare(" 
     INSERT INTO gpvwc_DBSW.engine_allocation SET 
     team_id=:team_id, 
     car=2, 
     event=:nextEvent, 
     engine=:previousengine2, 
     driver=:Car2nr; 
"); 
$stmt->execute(
    array(
     ':team_id' => $team_id, 
     ':nextEvent' => $nextEvent, 
     ':previousengine2' => $previousengine2, 
     ':Car2nr' => $Car2nr) 
); 
$affected_rows = $stmt->rowCount(); 

我覺得上面的工作,但爲了安全起見,你可以bindValue並設置類型: - 「$ Car2nr」

$stmt->bindValue(':Car2nr', $Car2nr, PDO::PARAM_STR);