无法回显查询结果 - 查询显然是正确的?非常简单的PHP

时间:2015-11-24 17:09:48

标签: php mysql

所以我试图创建一个HTML下拉列表。列表很好 - 它显示了我自己的MySQL查询所需的所有选项;但是我的下一步是为租户设置默认值(即当前的房东)。

现在,我能够成功,但只能使用房东钥匙(这是在一个单独的表中)。我有第二个查询根据键查找房东的名字,我甚至无法得到它来回应响应。我必须假设查询不好 - 但是在整个上午查看相同的代码行之后,我相信我可以自信地说它不是。我希望第二组眼睛看到我不会看到的东西。

为租户获取当前房东

$sql = mysql_query("SELECT data_txt FROM field_data WHERE itemid = $uid AND fieldid = 16");
$row = mysql_fetch_array($sql);
$ll1 = $row[0];
$sql = mysql_query("SELECT info FROM landlords WHERE key = $ll1 LIMIT 1");
$row = mysql_fetch_array($sql);
$ll1_name = $row[0]

在下拉列表中设置默认值

我不相信问题在这里,因为我不能做任何像回声变量$ ll1_name这样简单的事情;但我觉得值得包括。

<td>

<?php echo "$ll1"; ?><br>

<?php echo "$ll1_name"; ?><br>

<select name=ll1>

<option value="<?php echo "$ll1"; ?>"> <?php echo "$ll1_name"; ?></option>
<?php
while ($curLandlord = mysql_fetch_array($landlordRows)){
?>
<option value="<?php echo "$curLandlord[0]"; ?>"> <?php echo "$curLandlord[1]"; ?></option>

<?php
}
?>


</select>
</td>

另外,我很清楚这个库是折旧的,我的字段没有消毒等等。我只是尽可能简单,然后在我有一个工作模型后实现它。变量越少越好。

以下是表格数据的示例:

地主

key,info,id(自动增量)

-*key*: ll1_07
-*info*: John Doe
-*id*: 77

field_data id,fieldid,data_txt,itemid

-*id*: 1234 (auto increment)
-*fieldid*: 18 (each fieldid corresponds to a field name in another table.  18 is landlord)
-*data_txt*: ll1_77
-*itemid*: 33 (tenants unique ID)

2 个答案:

答案 0 :(得分:2)

不,这不是“正确的”。你有一个SQL注入漏洞。仅仅因为你的$ll1值来自数据库并不意味着在另一个查询中重用是安全的。你做的相当于

SELECT info FROM landlords WHERE key = foo LIMIT 1
                                       ^^^---unknown/illegal field name

而不是

SELECT info FROM landlords WHERE key = 'foo' LIMIT 1
                                       ^^^^^--string literal

如果在查询调用中甚至有BASIC错误处理,则会通知您:

$sql = mysql_query("SELECT [..snip..]") or die(mysql_error());
                                       ^^^^^^^^^^^^^^^^^^^^^^

从不 EVER 假设查询成功。即使sql在语法上是100%正确的,但是它仍然有无数原因导致STILL失败(最大的一个:丢失外键)。

答案 1 :(得分:1)

试试这个并看看响应是什么:

$sql = "
    SELECT
        fd.data_text,
        l.info
    FROM
        field_data fd
    JOIN
        landlords l
        ON fd.data_text = l.key
    WHERE
        fd.itemid = $uid
        AND fd.fieldid = 16
    LIMIT 1";

$rs = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($rs);

var_dump($row);

这应该告诉你是否收到任何数据。