我已经用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'";