2016-09-19 31 views
0

我有一個很長的插入查詢至少包含10列。我要尋找建立這個查詢就像一個緊湊的方式:PHP - MySQLi:與「值」部分構建查詢部分

$mysqli = new MySQLi(...); 
$mysqli->query("insert into table"); 
$mysqli->addKeyValue("columnName1", "value1"); 
$mysqli->addKeyValue("columnName2", "value2"); 
$mysqli->addKeyValue("columnName"3, "value3"); 
$mysqli->execute(); 

據我所知是沒有辦法用默認的庫MySQLi做到這一點。這是一個提供類似功能的庫嗎?

UPDATE:

我堅持嘗試做這樣的事情,這是我想寫那不超過每行80-100個字符的限制,使我的代碼更可讀的代碼的原因。

我知道preapred語句並綁定參數。

+0

看起來像一個參數化查詢,然後'bind_param()'給我[手冊](http://php.net/manual/en/mysqli-stmt.bind-param.php) – RiggsFolly

+0

我知道,但如果你有很多列,你仍然必須並排寫它們。我想逐個添加它們。 –

+0

我看不出有什麼不同,'bind_param()'最新怎麼了' – RiggsFolly

回答

1

扯下我可以爲您提供兩個庫,可以做你想做的。

其中一個被命名爲PDO。有了它,你可以做的正是你在你的問題寫的方式相同:

$pdo = new PDO(...); 
$stmt = $pdo->prepare("insert into table"); 
$stmt->bindValue("columnName1", "value1"); 
$stmt->bindValue("columnName2", "value2"); 
$stmt->bindValue("columnName"3, "value3"); 
$stmt->execute(); 

另一個是SafeMysql我寫信給做的mysqli使用。有了它,方法將有所不同:

include_once 'safemysql.class.php'; 
$db = new safeMysql(); 
$data = [ 
    "columnName1" => "value1", 
    "columnName2" => "value2", 
    "columnName3" => "value3", 
]; 
$db->query("insert into table SET ?u", $data); 

正如你所看到的,在這兩種情況下,行大小不超過40個字符。

0

bind_param有什麼問題,這與您正在做的事很相似。

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)"); 
$stmt->bind_param('sssd', 
        $code, 
        $language, 
        $official, 
        $percent); 

$code = 'DEU'; 
$language = 'Bavarian'; 
$official = "F"; 
$percent = 11.2; 

/* execute prepared statement */ 
$stmt->execute(); 

// add another row 
$code = 'XXX'; 
$language = 'Yyyyyyyy'; 
$official = "Y"; 
$percent = 19.2; 

/* execute prepared statement */ 
$stmt->execute(); 

Shamlessly從手動

+0

區別在於,比方說,如果你有20列,你必須寫一個非常長的'$ stmt-> bind_param()'行。 –

+0

這不是我的問題的答案。這是我寫代碼的滋味。我想逐行添加每列值。 –

+0

我不喜歡很長的代碼行,而且我試圖連接不超過80-100個字符的代碼,以便在水平滾動的情況下使其更具可讀性。 –