【问题标题】:MYSQL SELECT max(ID) WHERE Onderdeel_ID=$Onderdeel_IDMYSQL SELECT max(ID) WHERE Onderdeel_ID=$Onderdeel_ID
【发布时间】:2012-11-20 18:16:06
【问题描述】:

$result = mysql_query("SELECT max(Cardex_ID) FROM cardex WHERE Onderdeel_ID=$Onderdeel_ID"); 如果(!$结果){ die('无法查询:' . mysql_error()); }

    $Cardex_ID = mysql_result($result, 0, 'Cardex_ID');

    echo $Cardex_ID;

    mysql_query("UPDATE cardex SET PADate=$PAdate, PAhours=$PAhours, PAcycles=$PAcycles, PAlanding=$PAlanding WHERE Cardex_ID=$Cardex_ID");

【问题讨论】:

  • 我建议您开始使用 PDO 连接数据库。 php.net/manual/en/ref.pdo-mysql.php。您是否尝试过 $result 中的 var_dump 并查看您得到了什么?
  • mysql_error() 会告诉你出了什么问题。
  • 我有一个连接,这不是问题。但我想要最大 cardex_id 但我没有结果。它停在 if(!$result)
  • 您确定 Onderdeel_ID 是一个字符串吗?通常 Id 的类型是数字。也许删除引号并再次测试。此外,您确定给出了 $Onderdeel_ID。再添加一个回声来测试该变量的值。
  • @stefan mysql_error() 显示了什么??

标签: mysql select


【解决方案1】:

我建议您使用PDO 连接到您的数据库,而不是使用该通用连接。 此外,如果 $Onderdeel_ID 是一个数字,则您不需要 ""

   $db = new PDO ('mysql:host=localhost;dbname=DB_NAME','DB_USER','DB_PASS');
    $sql = 'SELECT max(Cardex_ID) FROM cardex WHERE Onderdeel_ID='. $Onderdeel_ID;
    $result = $db->query($sql)->fetch(PDO::FETCH_ASSOC);
    echo 'SELECT';
    if (!$result) {
      echo 'RESULT';
    }

注意:同样有效和首选的是使用语句prepare 来防止 SQL 注入:

    $db = new PDO ('mysql:host=localhost;dbname=DB_NAME','DB_USER','DB_PASS');
    $db->prepare ( 'SELECT max(Cardex_ID) FROM cardex WHERE Onderdeel_ID=:Onderdeel_ID');
    $result = $db->execute( array( ':Onderdeel_ID' => $Onderdeel_ID ) );

此外,如果您仍然遇到问题,请检查您的 $Onderdeel_ID 是否已通过。一个简单的var_dump($Onderdeel_ID); 就可以了

【讨论】:

  • -1。在转义查询的重要部分方面同样糟糕。
  • 你应该使用准备好的语句,例如$stmt = $db->prepare('SELECT .... WHERE onderdeel_id=:onderdeel'); ... $stmt->execute(array(':onderdeel' => $onderdeel_id));
  • 最佳实践不是必须的,考虑到他甚至没有使用 PDO,我觉得引入许多新概念会使帖子的作者感到困惑,而不是帮助他。
  • 这是建设性的批评;改进答案应该比捍卫答案更重要。
  • 我明白你的意思。我相应地修改了我的答案。但不久前我正在学习 PDO,而使用 ? 或 : 变量语句的准备会让我感到困惑。我认为,当您刚开始时,有时对于从未接触过 PDO 的人来说,太多的新概念可能会让人不知所措。有时少即是多。
猜你喜欢
  • 2017-09-27
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2016-10-03
  • 1970-01-01
相关资源
最近更新 更多