尝试对变量使用SELECT,WHERE和LIKE无效

时间:2018-06-20 16:32:33

标签: php sql

感谢阅读。

我有两个表,一个称为“ pagetable”,另一个称为“ tablestream”。

在我的PHP中,我有这段代码。

<?php
  $sqlout1f = "SELECT source FROM pagetable WHERE output LIKE 'out1f'";
  $resultout1f = mysqli_query($conn, $sqlout1f);

  $sqlout1fsrc ="SELECT streamurl FROM tablestream WHERE vanrole LIKE '{resultout1f}'";
  $resultsqlout1fsrc = mysqli_query ($conn,$sqlout1fsrc);

...

while($row = mysqli_fetch_array($resultsqlout1fsrc)) {
echo $row['streamurl'];
}

?>

我一点都没有收到任何错误,但是页面上也什么也没有得到。我尝试用该变量存储的字符串替换该变量,并且效果很好

编辑:一旦我将'$'放在我忘记的变量之前,就会得到:

可恢复的致命错误:在第22行的C:\ xampp \ htdocs \ newpage.php中,无法将mysqli_result类的对象转换为字符串

第22行是:$sqlout1fsrc ="SELECT streamurl FROM tablestream WHERE vanrole LIKE '{$resultout1f}'";

编辑2:out1f是文本,不是变量,有问题的变量是{$ resultout1f}

3 个答案:

答案 0 :(得分:1)

您以错误的方式使用LIKE子句。这是LIKE子句的基础:

LIKE通常以3种方式使用:

1。)喜欢'%[STRING]%'-指定[STRING]可以在任何位置。

2。)LIKE'[STRING]%'-指定要以[STRING]开头的条件

3。)LIKE'%[STRING]'-指定要以[STRING]结尾的条件

遇到您的问题。您可以修改语句以使用占位符,并稍后用实际值替换占位符,如下所述:

$sqlout1f = "SELECT source FROM pagetable WHERE output LIKE '%out1f%'";
$sqlout1fsrc ="SELECT streamurl FROM tablestream WHERE vanrole LIKE '%[resultout1f]%'";

$resultout1f = mysqli_query($conn, $sqlout1f);

如果您的行数等于1:

$row = mysqli_fetch_array($resultout1f, MYSQLI_ASSOC);

$sqlout1fsrc = str_replace('[resultout1f]', $row['source'], $sqlout1fsrc);
$resultsqlout1fsrc = mysqli_query ($conn,$sqlout1fsrc);

while($row = mysqli_fetch_array($resultsqlout1fsrc, MYSQLI_ASSOC)) {
    echo $row['streamurl'];
}

如果您的行数大于1:

while($row = mysqli_fetch_array($resultout1f, MYSQLI_ASSOC)) {
    $sqlout2fsrc = $sqlout1fsrc;
    $sqlout2fsrc = str_replace('[resultout1f]', $row['source'], $sqlout2fsrc);
    $resultsqlout1fsrc = mysqli_query ($conn,$sqlout2fsrc);

    while($row2 = mysqli_fetch_array($resultsqlout1fsrc, MYSQLI_ASSOC);) {
        echo $row2['streamurl'];
    }
}

您可以找到有关LIKE子句Here的更多信息。

希望这会有所帮助。

答案 1 :(得分:0)

其中有一个刻录问题,即以下代码;

$sqlout1f = "SELECT source FROM pagetable WHERE output LIKE 'out1f'";
$resultout1f = mysqli_query($conn, $sqlout1f);

$sqlout1fsrc ="SELECT streamurl FROM tablestream WHERE vanrole LIKE '{resultout1f}'";
$resultsqlout1fsrc = mysqli_query ($conn,$sqlout1fsrc);

如果将$添加到第二个查询中(使用变量的位置),则说明您使用的是资源而不是字符串,这是因为$resultout1f是第一个查询的结果,即数据集,而不是数据结果,您需要获取结果集的信息 out ,然后才能在辅助查询中使用其中的任何信息

答案 2 :(得分:-1)

使用LIKE时,您应将查询字符串与%%绑定

SELECT * FROM TABLE WHERE COLUMN LIKE "%query%"

%a =>以sant a ,comm a
结尾的任何内容 a%=>任何以 a 复制, a nswer
%a%=>中间c a t,m a d a m