PHP - MySQLi:使用“值”部分构建查询

问题描述 投票:0回答:2

我有一个包含 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 无法做到这一点。有没有提供类似功能的库?

更新:

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

我知道准备好的语句并绑定参数。

php mysqli
2个回答
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();

无耻地从手册中抄袭

© www.soinside.com 2019 - 2024. All rights reserved.