PHP检查MySQL表是否包含值

时间:2012-01-31 04:24:57

标签: php mysql database

好的,标题可能会有点误导。我想要做的是在我的网站上添加一个喜欢的系统。我有一列我最喜欢的东西,我设置了它,所以在每个项目ID之后有一个:。如果它包含1345:13456:232:524378:324,如何检查从我的数据库(232)返回的字符串?如果确实如此,我会回复preRend否则我会回显insert并插入该ID后跟:。这就是我到目前为止所做的:

<?php
session_start();
require_once(".conf.php");
$logged = $_SESSION['logged'];
$user = $_SESSION['user'];
$fwdfav = $_POST['id'];
$query = mysql_query("SELECT * FROM accountController WHERE user='$user'");

if ($logged == 1) 
{
    while ($row = mysql_fetch_array($query)) {
    if ($row['fav-itms'] //This is where I got stuck. How to check if it contains a value.)
        {
            mysql_query("INSERT INTO accountController ('fav-itms') VALUES ('$fwdfav')");
            echo 'inserted';
        }
        else
        {
            echo 'preRend';
        }

    }
} 
else
{
    echo 'nlog';
}
?>

非常感谢你!我确信这里有很多错误,因为我很累。

3 个答案:

答案 0 :(得分:2)

您采用的方法效率极低,并且没有利用您使用数据库这一事实。

(顺便说一下......我希望这只是示例代码;您的INSERT查询中有一个巨大的SQL注入漏洞。)

我要做的是创建第二个表格,如下所示:

favorites (
    id int(11) NOT NULL auto_increment,
    user_id int(11),
    fav_id int(11)
)

让每行代表用户最喜欢的一对。然后,你可以让MySQL尽一切努力弄清楚用户是否已经收藏了某些东西,例如,

SELECT COUNT(*) FROM favorites WHERE user_id = %d AND fav_id = %d;
// Substitute the actual look-up values in using prepared statements

您也可以同样快速获取用户的实际收藏夹等。

请记住,数据库的设计目的是为了快速存储和查找信息。 PHP是一种通用编程语言。在可能的情况下,让MySQL为您行走。

(这个建议适用于中等规模的设置。如果你需要处理数百万的并发用户,显然需要更多的优化,而传统的关系数据库可能甚至不适合。但我不会得到这样的印象你现在在哪里。)

答案 1 :(得分:1)

您可以在数组中将其作为支票进行爆炸,例如:


$yourArr = explode(":", $row['fav-itms']);
$checkFor = 232;
if(in_array($checkFor, $yourArr)) {
  //it exists
}
else {
  //does not exist
}

你的意思是什么

答案 2 :(得分:0)

我知道这是在不久前发布的,但是当我进行搜索时就出现了。

我有一个存储我的投资组合信息的数据库,它包含图像的位置。

我正在一个页面上显示项目的完整视图。在页面中,我需要它来检查图像的列,如果有空,我需要它不显示任何内容。

我就是这样做的。

//连接,选择数据库,查询与页面相关的表格。我已经对特定行进行了查询。

    if($row[columnName1]){
       echo '<div> displaying value </div>';
    }
    if($row[columnName2]){
       echo '<div> displaying value </div>';
    }

发生了什么,如果所选行中的columnName1有值,则显示div中的值,否则为什么。然后到第2栏。

如果这样做

    if(!$row[columnName1]){
            //content displayed
    }

并且该列不包含值,然后将运行{}之间的内容。

以我需要的方式工作,也许这会对某人有帮助。