【问题标题】:Sum(?) with mysqli returns 0 or wrong result when prepared and bind_paramSum(?) with mysqli 在准备和 bind_param 时返回 0 或错误结果
【发布时间】:2014-11-21 08:17:32
【问题描述】:

我想用 php 和 mysqli 和准备好的语句在 Mysql 中总结一行。当我使用准备好的语句并绑定参数时,它返回错误的结果(大约 200...):

$stmt = $mysqli->prepare("SELECT SUM($user) FROM $datenbankid WHERE namepayer=?");
$value = "clemens";

if(!$stmt->bind_param("s", $value)){
    $response["errormessage"] = $stmt->error;       
    }
    $stmt->execute();

    $stmt->bind_result($sum);
    $stmt->fetch();

    $response["debtsan" . $value] = $sum;

    $stmt->close();

但是当我在没有 bind_param 的情况下使用它时,它会返回正确的数量:

$stmt = $mysqli->prepare("SELECT SUM($user) FROM $datenbankid WHERE namepayer = Clemens");

    $stmt->execute();

    $stmt->bind_result($sum);
    $stmt->fetch();

    $response["debtsantest" . $value] = $sum;

    $stmt->close();

我没有收到任何错误,并且没有绑定参数它正在工作。但我想使用 bind_param 来避免 sql 注入。

感谢您的帮助。 德米安

【问题讨论】:

  • 你确定$value 不是空的或者/它是字符串
  • 我可以返回 $value,它是我定义的字符串“clemens”。
  • 在您打开<?php标签error_reporting(E_ALL); ini_set('display_errors', 1);后立即将错误报告添加到文件顶部,看看它是否会产生任何结果。
  • PHP 解析错误:语法错误,意外的 'error_reporting' 编辑:只是一个错字。没有其他错误。
  • 第二个查询应返回Clemens 是未定义列的形式的错误。您确定这些示例真的是您正在运行的代码吗?

标签: php mysql mysqli prepared-statement


【解决方案1】:

您可以尝试使用此代码吗,将您的查询保留为在查询下方使用此代码

$value = "clemens";
    if($stmt === false) {
        $response["errormessage"] =$mysqli->error;       
    }
    $stmt->bind_param("s", $value);
    $stmt->execute();
    $stmt->bind_result($sum);
    while ($stmt->fetch()) {
       printf("%i\n", $sum);
    }

【讨论】:

  • 调用未定义方法mysqli_stmt::get_result()
  • 在这种情况下,您可以在使用时使用$stmt->bind_result($sum); 并打印值
  • 最后一件事,您也可以尝试将其添加到您的 sql 中,例如 SELECT SUM($user) as sum
  • 那我怎么得到总和呢?如果我使用 mysqli_fetch_array 它说它不是 mysqli_result 而是一个对象。
猜你喜欢
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多