gpt4 book ai didi

php - 如何从结果中的同一行中获取 3 列?

转载 作者:可可西里 更新时间:2023-11-01 08:45:01 25 4
gpt4 key购买 nike

我正在尝试修复 osCommerce 商店中的代码,该代码在 PHP 5.4 上出现以下错误:

mysql_result(): supplied argument is not a valid MySQL result resource

这是代码:

$products = $cart->get_products();
for ($i=0, $n=sizeof($products); $i<$n; $i++) {
$id_produto = (INT)$products[$i]['id'];
$sql = tep_db_query("SELECT p.manufacturers_id,m.manufacturers_cep,m.manufacturers_name FROM products p
LEFT JOIN manufacturers m ON m.manufacturers_id = p.manufacturers_id
WHERE p.products_id = '$id_produto'")OR DIE(mysql_error());
$id_fabricante = mysql_result($sql,'0','manufacturers_id');
$cep_fabricante = mysql_result($sql,'0','manufacturers_cep');
$nome_fabricante = mysql_result($sql,'0','manufacturers_name');

$id_fabricantes[$id_fabricante]['peso'] += $products[$i]['quantity']*$products[$i]['weight'];
$id_fabricantes[$id_fabricante]['cep'] = $cep_fabricante;
$id_fabricantes[$id_fabricante]['nome'] = $nome_fabricante;

}

我尝试更改它并且没有更多错误,但它仍然无法正常工作。这是正确的做法吗?

$products = $cart->get_products();
for ($i=0, $n=sizeof($products); $i<$n; $i++) {
$id_produto = (INT)$products[$i]['id'];
$sql = tep_db_query("SELECT p.manufacturers_id,m.manufacturers_cep,m.manufacturers_name FROM products p
LEFT JOIN manufacturers m ON m.manufacturers_id = p.manufacturers_id
WHERE p.products_id = '$id_produto'")OR DIE(mysql_error());

$row = mysqli_fetch_assoc($sql);
$id_fabricante = $row['manufacturers_id'];

$row = mysqli_fetch_assoc($sql);
$cep_fabricante = $row['manufacturers_cep'];

$row = mysqli_fetch_assoc($sql);
$nome_fabricante = $row['manufacturers_name'];

$id_fabricantes[$id_fabricante]['peso'] += $products[$i]['quantity']*$products[$i]['weight'];
$id_fabricantes[$id_fabricante]['cep'] = $cep_fabricante;
$id_fabricantes[$id_fabricante]['nome'] = $nome_fabricante;

}

最佳答案

不,这是不正确的。如果您检查 manual ,您会看到第二个参数是要在结果集中获取的行。在您的原始示例中,您仅从第一行获取数据 - 0 - 没有其他内容。

在您的 mysqli 代码中,您在每次分配之前获取一个新行,因此数据将是来自不同行的不同字段的值的混合。

正确的方法应该是这样的:

// fetch the first row in the result set
$row = mysqli_fetch_assoc($sql);

$id_fabricante = $row['manufacturers_id'];
$cep_fabricante = $row['manufacturers_cep'];
$nome_fabricante = $row['manufacturers_name'];

除此之外,您还需要添加错误处理以确保有一行。

您还应该尽量避免在循环中运行 sql 查询。您可能会使用例如 mysql 的 IN 在 1 个查询中获取所有行子句,然后您可以遍历该结果集。

关于php - 如何从结果中的同一行中获取 3 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31353939/

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