PHP/MYSQL: What's Wrong With My Query/ PHP variable in q


PHP/MYSQL: What's Wrong With My Query/ PHP variable in query

我已经用PHP和MySQL编码大约一年了,并且已经很好地掌握了它的窍门;用连接和计算字段构造非常复杂的查询以及MySQL的所有其他乐趣在几个月里对我来说都不是问题。

但是下面的代码块在语法上有些问题,我无法弄清楚——尽管它非常简单,甚至更令人恼火的是,它与我正在从事的项目的其他部分密切相关(并且工作完美)。

这是我试图运行的问题代码,然后是我已经做过的错误检查,试图隔离问题。

如果有人有任何建议,我将非常感激,因为我开始失去理智了。

<标题>问题:

我真的要疯了,所以当你看到代码时请不要笑:

$query="SELECT count(somefield) FROM db_name WHERE otherfield='".$myvariable."'";

当使用某个变量作为字段搜索的一部分时,我的查询没有找到结果-即使我知道数据库中有超过900条记录应该匹配。

<标题> Bugchecking:
  • 因为我知道变量的值,我传递给查询,我已经尝试硬编码到查询,它工作得很好。
  • 我已经在MySQL控制台中运行了查询(当然,再一次,硬编码而不是变量),它工作得很好。
    • 在我看来,这两个事实消除了PHP版本的查询存在语法错误的可能性。
  • 为了消除所有可能的数据库连接问题,并确保问题与通过返回的结果迭代无关,而不是试图获得实际结果,我已经更改了原始查询,仅返回结果的计数,并在连接序列期间合并了标准or die(mysql_error())语句。查询正在执行,但是没有找到任何结果,因此消除了连接问题的可能性。
  • 我已经验证了我正在检查的字段是我正在寻找的信息的正确字段(就像我说的,如果我将变量硬编码到查询中,它会运行良好…当然,这在完成的代码中不会是一个选项)。
  • 我检查了变量的类型之前,试图将其传递到查询(计算也许,因为它是从脚本早先返回的xml中拉出来的,也许它显示为数组或其他东西)。它的类型是字符串。
  • 我已经验证了变量的格式是我期望在数据库中找到的方式;支柱等
  • 我已经尝试使用LIKE '%".$myvariable."'";仍然没有骰子。
谁有什么建议,我可以做什么来弄清楚到底出了什么问题?非常感谢!

这不是PHP的问题,所以引号与它无关。该查询没有错误,因此您需要一步一步地调试它。

SELECT count(*) FROM table_name

二世。SELECT count(*) FROM table_name WHERE field='$myvariable'

当你在查询中处理PHP变量时,回显查询并直接在数据库中运行,以省略PHP方面的错误。

III。SELECT count(somefield) FROM table_name WHERE field='$myvariable'

$myVariable是否转义?如果没有,使用

转义
$escapedVariable=mysql_real_escape_string($myVariable);

,然后运行

$query="SELECT count(somefield) FROM db_name WHERE otherfield='$escapedVariable'";

感谢所有试图帮助的人,但我在发布后几个小时才明白:第一个问题是我忘记使用mysql_real_escape_string($myvariable)…我如何忘记以及为什么忘记的原因有很多,但就是这样。

所以,在把那个家伙插回去之后(我以为它一开始就在我的代码的这个特定模块中,但这就是"假设"让你的地方,哈哈),我以为我把整个事情都搞定了。三个小时过去了,还是一无所获。然后我意识到它必须与被解析成$myvariable的XML有关……所以我们又用了几个小时。

最后,我意识到真正的罪魁祸首是我的眼睛(它不是那么好)。在运行前读取查询的调试回显时,看起来像一个完全合法的引号字符串,结果发现有前后空白(当然,我立即用$myvariable=trim($myvariable, " "), and, that, of course, solved the entire problem...:<…是的,我是一个白痴,我很抱歉,但是,在研究了这行愚蠢透顶的代码超过48小时后(我习惯写这样的东西: )
$query="UPDATE db_one.table_one SET item1='".(string)$result_array[$i][1]."', item2='".(string)$result_array[$i][2]."' WHERE thing3=".(string)$result_array[$i][19];

…和其他各种有趣的废话),我不得不求助于询问(因为我——没有双关语的意思——看不出问题所在……啊)…所以…我是一个白痴,我很抱歉(但受到你们这些试图帮助我的好心人的鼓励),我很抱歉浪费了大家的时间。我需要学习如何处理XML much *more*。

对不起,再次感谢!

我一直这样写

$query="SELECT count(somefield) FROM db_name WHERE otherfield='$myvariable' ";

尝试删除变量名

处的双引号和点

你不需要在var周围加上括号,再看看其他的变化。

$query="SELECT count(*) FROM table_name WHERE field='$myvariable'";