gpt4 book ai didi

PHP MySQL ORDER BY level DESC LIMIT 1 不适用于所有搜索

转载 作者:行者123 更新时间:2023-11-29 01:20:49 26 4
gpt4 key购买 nike

我在网上和 Stackoverflow 上搜索了这个问题的答案。似乎没有任何帮助。这应该是一个非常简单的函数。除了一个名为 level 的字段外,我有多个内容相同的记录。我想找到 level 中 int 值最高的记录。一个例子是我有多个记录具有相同的用户 ID 和电子邮件,但第一个记录从级别 1 开始,下一个可能是级别 2,然后下一个可能再次是级别 1。我想找到 level = 2 的记录。我的代码非常简单。

  $LoginRS__query=sprintf("SELECT userid, email, level FROM orders WHERE userid=%s AND email=%s ORDER BY level DESC LIMIT 1", GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

对于某些人来说,这可以正常工作,返回级别为 2、3、8、9 等的记录。对于其他人,它只会返回 level = 1 的记录。字段级别是 int 长度 1。我正在运行 php 版本 5.3.28 和 MySQL 5.5.36

有什么想法吗?和大多数人一样,我很匆忙。谢谢...

我没有意识到 level 是一个保留字。直到现在,我一直在使用相同的表定义并使用级别编写其他脚本,没有任何问题。我正在检查错误,但没有返回任何错误。检查结果时 foreach ($row_LoginRS as $key=>$val) echo $键。 ": ".$val。 “
”;我通常得到:用户名:9999邮箱:email@email.com级别:1(或 2 或 3)。
这看起来是正确的。
我试着按照建议用刻度线括起来 - SELECT userid, email, level ... 和/或/两者 ORDER BY 'level'它返回:用户名:9999邮箱:email@email.com等级:等级
我的原始查询看起来是正确的:

string(120) "
SELECT userid, email, level FROM orders WHERE userid='9999' AND email='email@email.com' ORDER BY level DESC LIMIT 1
"

当使用 ticks 时,我得到:

string(120) "
SELECT userid, email, 'level' FROM orders WHERE userid='9999' AND email='email@email.com' ORDER BY 'level' DESC LIMIT 1
"

我不确定 MySQL 客户端问题。 phpinfo返回:事件持久链接 0
活跃链接 0
客户端 API 版本 5.5.36
MYSQL_MODULE_TYPE 外部
MYSQL_SOCKET/var/lib/mysql/mysql.sock
MYSQL_INCLUDE -I/usr/include/mysql
MYSQL_LIBS -L/usr/lib64 -lmysqlclient

最佳答案

您没有检查错误。

它需要特别注意,因此要么将其重命名为保留字以外的名称,要么在其周围打勾:

SELECT userid, email, `level` ...

使用与您连接时相同的 API 检查查询中的错误,这对我们来说是未知的。

你确实标记为 mysql,但是 MySQL 在 PHP 环境下有 3 个不同的 API,不算 MSSQL。

  • mysql_
  • mysqli_
  • PDO

编辑:

I tried enclosing in ticks as suggested

SELECT userid, email, `level` ... and/or/both ORDER BY 'level'
^ tick ^ quote

and it returns: userid: 9999 email: email@email.com level: level

和...

My original query looks correct: string(120) "SELECT userid, email, level FROM orders WHERE userid='9999' AND email='email@email.com' ORDER BY level DESC LIMIT 1" and when using ticks I get: string(120) "SELECT userid, email, 'level' FROM orders WHERE userid='9999' AND email='email@email.com' ORDER BY 'level' DESC LIMIT 1"

  • ORDER BY 'level' 被视为字符串文字,而不是列。这也需要用蜱包裹。

将您的查询更改为:

"SELECT userid, email, `level` FROM orders 
WHERE userid='9999'
AND email='email@email.com'
ORDER BY `level` DESC LIMIT 1"
  • 刻度与单引号不同。

添加error reporting到您的文件的顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:显示错误只应在试运行中进行,绝不能在生产中进行。

I'm not sure about the MySQL client question.

我们需要知道您是 mysql_mysqli_ 还是要连接的 PDO。

在任何一种情况下,检查查询是否有错误。从以下列表中选择:

"No errors"

检查错误的示例查询:

mysql_

$result = mysql_query($query, $con);
if ( !$result ) {
trigger_error('query failed', E_USER_ERROR);
}

or die(mysql_error($con))mysql_query()

或mysqli_

$result = mysqli_query($con, $query);

if (!$result)
{
throw new Exception(mysqli_error($con));
}

else{ echo "Success."; }

or die(mysqli_error($con))mysqli_query()

或 PDO

error_reporting(E_ALL);
ini_set('display_errors', 1);

try {
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){
$e->getMessage(); for the real error
}

关于PHP MySQL ORDER BY level DESC LIMIT 1 不适用于所有搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000983/

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