我有一个包含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。
答案 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();
无耻地从手册中删除