PHP - MySQLi:使用“值”部分

时间:2016-09-19 11:14:57

标签: php mysqli

我有一个包含10多列的长插入查询。我正在寻找一种紧凑的方式来构建这样的查询,如:

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

据我所知,默认MySQLi无法做到这一点。 tehre是一个提供类似功能的库吗?

更新

我坚持尝试做这样的事情的原因是我试图编写每行不超过80-100个字符限制的代码,以使我的代码更具可读性。

我知道preapred语句并绑定param。

2 个答案:

答案 0 :(得分: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个字符。

答案 1 :(得分: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();
  

无耻地从手册中删除