gpt4 book ai didi

php - smarty -sql 查询 - 其中 id 子句是另一个查询的结果

转载 作者:行者123 更新时间:2023-11-30 22:48:10 25 4
gpt4 key购买 nike

对于合作伙伴数据,我需要合作伙伴 ID 来对应契约(Contract)结果中的 pid。我从契约(Contract)数据中得到了查询结果,得到了契约(Contract)数据,然后我需要 partner.id 是 contract.pid。保存时,出现此错误:

查询失败:您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 3 行的 '' 附近使用的正确语法

require "$_SERVER[DOCUMENT_ROOT]/billing/server/Smarty/libs/Smarty.class.php";
require_once "$_SERVER[DOCUMENT_ROOT]/common/server/engine.php";

// required args
$cbid = $_GET['cbid'];
//$smarty->force_compile = true;
$smarty->debugging = true;
$smarty->caching = true;
$smarty->cache_lifetime = 120;

// ------- contract data ------
$sql = "
SELECT *
FROM billing.contract_body
JOIN billing.contract_stub ON stub=contract_stub.id
WHERE contract_body.id=$cbid

";
$result = mysql_query($sql) or die ("Query failed : " . mysql_error());
while ($contract = mysql_fetch_assoc($result))
{
$value[] = $contract;
}
$smarty->assign('contract', $value);




// ------- partner data ------
$sql = "
SELECT *
FROM common.partner
WHERE partner.id=$contract[pid]

";
$result = mysql_query($sql) or die ("Query failed : " . mysql_error());
while ($partner = mysql_fetch_assoc($result))
{
$value[] = $partner;

}

最佳答案

有几个可能的问题:

1) 在 php 字符串中插入数组元素时,您可能应该使用 {}。我认为不同(较旧)版本的 php 处理没有 {} 的情况的方式不同(很难获得对较旧版本 php 文档的引用)。该值很容易被解释为 '',这将导致 sql 错误。您可以通过打印出正在执行的实际 sql 字符串来确认这一点——如果缺少值,这就是问题所在。我个人总是对除简单变量“$myvar”之外的每个表达式使用 {} 语法

2) $contract[pid] 可能无效。 pid 将被解释为常量 (DEFINE)(可能解析为“pid”)。我猜你的意思是:$contract['pid']。不幸的是,PHP 文档在这方面并不一致 - 一些示例显示了不带引号的使用,一些部分明确指出了问题:

"Always use quotes around a string literal array index. For example, $foo['bar'] is correct, while $foo[bar] is not. But why? It is common to encounter this kind of syntax in old scripts:"

http://php.net/manual/en/language.types.array.php

3) sql equals 比较中的值用单引号括起来比较合适。其中 table.column = 'value';它可能没有工作,具体取决于涉及的数据类型。

4) 您的代码受到 sql 注入(inject)的影响。您正在使用 $_GET 参数中的 cbid 值,而没有对其进行清理或使用查询参数。

那么试试这个:

"... where partner.id='{$contract['pid']}' "

请修复您的 sql 注入(inject) :) 最好的方法是使用查询参数,这首先避免了字符串插值的大部分问题。 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

关于php - smarty -sql 查询 - 其中 id 子句是另一个查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966950/

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