gpt4 book ai didi

php - 如何以 'reusable' 的方式将参数传递给数组中的 PDO SELECT 语句?

转载 作者:行者123 更新时间:2023-11-29 14:09:37 28 4
gpt4 key购买 nike

我是 PDO 新手,已成功将站点的大部分插入和更新转换为 PDO 事务,每个事务都位于一个集中可访问的函数中,以实现最大程度的重用。我真的很想对 SELECT 语句执行相同的操作,但这似乎更难!

我期望做的是这样的:

function getProdDetails2SaveInInvoice($data) {

global $dbh;

try {
$sth=$dbh->prepare("
SELECT
AES_DECRYPT(?, '".DBKEY,"'),
AES_DECRYPT(?, '".DBKEY,"'),
AES_DECRYPT(?, '".DBKEY,"')
FROM
products
WHERE
? ? ?
");

$sth->execute($data);
$sth->fetch(PDO::FETCH_OBJ);

return $sth;
}

catch(PDOException $e) {
echo "Something went wrong. Please report this error.\n";
file_put_contents(
$_SERVER['DOCUMENT_ROOT']."/PDOErrors.txt",
"\n\nScript name : ".SCRIPT."\nFunction name : ".__FUNCTION__."\n".
$e->getMessage(), FILE_APPEND);

throw new failedTransaction();
}
}

// Fetch additional info from invoice_products.
$data = array(
'alt_id', /* field 1 */
'prod_name', /* field 2 */
'prod_desc', /* field 3 */
'prod_id', /* where */
'=', /* operator */
$prodid /* comparison */
);
$rs = getProdDetails2SaveInInvoice($data);

不幸的是,这不起作用并返回错误,

ERROR:"Call to a member function execute() on a non-object".

我可以确认 $dbh 数据库连接正在工作,因为它与用于插入和更新的连接相同。

最佳答案

您无法绑定(bind)字段名称。假设 DBKEY 是一个常量,您的查询应如下所示:

$sth=$dbh->prepare("
SELECT
AES_DECRYPT(alt_id, ?),
AES_DECRYPT(prod_name, ?),
AES_DECRYPT(prod_desc, ?)
FROM
products
WHERE
prod_id = ?
");

和 $data 像这样:

$data = array(
DBKEY,
DBKEY,
DBKEY,
$prodid
);

关于php - 如何以 'reusable' 的方式将参数传递给数组中的 PDO SELECT 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13723988/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com