【问题标题】:multiple columns in where clause query mysqlwhere子句查询mysql中的多列
【发布时间】:2013-03-04 16:04:48
【问题描述】:

selectbox with multiple columns from mysql database

以下代码是来自zgr024的中奖代码

       <?php 
    include '../config.php';
    $sql = "SELECT * FROM megabase";  
    $resultaat = mysql_query($sql) or die (mysql_error());  
    $domains = array();
    while ($row = mysql_fetch_array($resultaat))       
    { 
       if (!empty($row['domeinnaam1'])) $domains[] = $row['domeinnaam1'];
       if (!empty($row['domeinnaam2'])) $domains[] = $row['domeinnaam2'];
    }
?>

   <select size="1" name="domeinnaam">
<?php
    foreach ($domains as $domain)
    {
        echo "<option>$domain</option>";
    } 
?>
    </select>

但是这段代码在我有以下代码的下一页上导致了一个预期的错误。

    <?php 

     //MySQL Database Connect
     include 'config.php';

    $domeinnaam=$_POST['domeinnaam']; 

    $data = 'SELECT * FROM megabase WHERE domeinnaam = "'.$domeinnaam.'"'; 
      $query = mysql_query($data) or die("Couldn't execute query. ". mysql_error()); 
      $data2 = mysql_fetch_array($query); 


    ?> 

如何更改最后一个代码以使用第一个代码:

我试过了:

        <?php 

         //MySQL Database Connect
         include 'config.php';

        $domeinnaam=$_POST['domeinnaam'];
       $domeinnaamquerry='domeinnaam1'.'domeinnaam2'.'domeinnaam3'.'domeinnaam4'.'domeinnaam5'.'do meinnaam6'.'domeinnaam7'.'domeinnaam8'.'domeinnaam9'.'domeinnaam10';

        $data = 'SELECT * FROM megabase WHERE $domeinnaamquerry = "'.$domeinnaam.'"'; 
          $query = mysql_query($data) or die("Couldn't execute query. ".             mysql_error()); 
          $data2 = mysql_fetch_array($query); 


        ?> 

但我收到以下错误: 无法执行查询。 “where 子句”中的未知列“$domeinnaamquery”

Okey 现在可以正常工作了,但它很草率,但工作起来感谢大家的意见,这很有帮助。并感谢您的警告。

这里是代码

     <?php 

      //MySQL Database Connect
      include 'config.php';

     $domeinnaam=$_POST['domeinnaam']; 

     $data = 'SELECT * FROM megabase WHERE domeinnaam1="'.$domeinnaam.'" OR domeinnaam2="'.$domeinnaam.'" OR domeinnaam3="'.$domeinnaam.'" OR domeinnaam4="'.$domeinnaam.'" OR domeinnaam5="'.$domeinnaam.'" OR domeinnaam6="'.$domeinnaam.'" OR domeinnaam7="'.$domeinnaam.'" OR domeinnaam8="'.$domeinnaam.'" OR domeinnaam9="'.$domeinnaam.'" OR domeinnaam10="'.$domeinnaam.'"    '; 
       $query = mysql_query($data) or die("Couldn't execute query. ". mysql_error()); 
       $data2 = mysql_fetch_array($query); 


     ?> 

【问题讨论】:

  • 提示:阅读PHP strings和SQL injection。
  • 这里有点不对劲。 1) 您对$data 使用了单个刻度,因此不会对$domeinnaamquerry 进行插值。 2) 当您定义$domeinnaamquerry 时,您已将所有列名粘合在一起,形成一个没有分隔符的巨大字符串。 3)即使你没有,你也不能使用一个 WHERE 子句来比较一个常量和多列和 4)SQL 注入。
  • 我不想告诉你这个,但如果可以的话,你需要重新设计你的数据库。您需要创建一个新的 DomainNames 表并将 FK 设置为您的 megabase 表。您永远不应该在数据库中有 columnname1-columnname10。我知道您现在这样做是否为时已晚,但在未来,适当的数据库设计会解决您的大部分问题。
  • Mike C 感谢这不是我每天都做的事情。老实说,我只是发现它无法将更多域添加到记录中,我是 excel 思维而不是 mysql 思维。
  • 他正在尝试获取在上一页中选择的选项的值...这些 cmets 与这个问题有什么关系?

标签: php mysql where-clause multiple-columns


【解决方案1】:

试试

<?php 

    //MySQL Database Connect
    include 'config.php';

    $domeinnaam=$_POST['domeinnaam']; 

    $data = "SELECT * FROM megabase WHERE domeinnaam1 = '$domeinnaam' OR domeinnaam2 = '$domeinnaam' "; 
    $query = mysql_query($data) or die("Couldn't execute query. ". mysql_error()); 
    $data2 = mysql_fetch_array($query); 

?>

【讨论】:

  • 确保将剩余的列添加到其中,这应该可以满足您的需要。
  • 我只是在没有看到你的答案zgr024的情况下这样做
  • 但是非常感谢,因为它是正确的代码。你又一次成功了。高超。现在我转到第 3 页上的错误,这是最后一页。这次我试着自己破解它。让我们看看我的大脑是否想做一些工作。哈哈
  • 我有一些奇怪的代码我不明白 WHERE domeinnaam = ".'"'.$Key.'"'; 如何在这里添加 OR 函数。我将为这个打开一个新问题第三部分
【解决方案2】:

如果你想让一个变量在 PHP 中被解释为它的值,你不能使用单引号。

$foo = 'World';

echo 'Hello $foo'; // Hello $foo
echo "Hello $foo"; // Hello World

因此,你想要

$data = "SELECT * FROM megabase WHERE $domeinnaamquerry = '".$domeinnaam."'"; 

尽管阅读 this 和 this 以了解为什么您真的不想要那个。

【讨论】:

  • 正如 GigaWatt 指出的那样,这里存在一大堆问题;这仅解决其中 2 个问题。
  • 谢谢 Dancrumb,我现在收到以下错误。并且 SQLInjection 这不是用于在线使用,但感谢您提供的信息!我现在收到的错误是:无法执行查询。 'where 子句'中的未知列'domeinnaam1domeinnaam2domeinnaam3domeinnaam4domeinnaam5domeinnaam6domeinnaam7domeinnaam8domeinnaam9domeinnaam10'
  • 他的问题是他试图动态填充 where 子句中的列名,而不是数据值。他试图让 WHERE columnname1='bob' or columnname2='bob' or columnname3='bob'..etc...
  • 是的 Mike C,这正是我所需要的。
  • 我刚刚发布了他正在寻找的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2023-04-01
  • 2015-05-08
  • 2020-10-13
  • 1970-01-01
相关资源
最近更新 更多