PHP检查MySQL表是否包含值

PHP检查MySQL表是否包含值,php,mysql,database,Php,Mysql,Database,好吧,标题可能有点误导。我想做的是在我的网站上添加一个我最喜欢的系统。我有一列我最喜欢的东西,我设置了它,所以在每个项目ID之后都有一个:。如果从我的数据库(1345:13456:232:524378:324)返回的字符串包含232,如何检查该字符串?如果是这样,我将回显preRend,否则我将回显insert,然后插入该ID,后跟一个:。这就是我到目前为止所做的: <?php session_start(); require_once(".conf.php"); $logged = $_

好吧,标题可能有点误导。我想做的是在我的网站上添加一个我最喜欢的系统。我有一列我最喜欢的东西,我设置了它,所以在每个项目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';
}
?>


非常感谢你!我肯定这里有很多错误,因为我很累

您可以在数组中分解它作为检查,如:


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

您的意思是这样的吗?

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

    if(!$row[columnName1]){
            //content displayed
    }
(顺便说一句,我希望这只是示例代码;您的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为您步行


(此建议适用于中等规模的设置。如果您需要同时处理数百万用户,显然需要进行更多的优化,而传统的关系数据库甚至可能不适合。但我不认为您现在正处于这种状态。)

我知道这是不久前发布的,但当我搜索时它出现了

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

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

我就是这样做的

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

    if($row[columnName1]){
       echo '<div> displaying value </div>';
    }
    if($row[columnName2]){
       echo '<div> displaying value </div>';
    }
并且该列不包含值,则将运行{}之间的值


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

不要在关系数据库列中存储分隔字符串!使用关系表创建多对多关系这个坏主意取决于系统,但是假设您负责代码和数据库,这并不是一种明智的方法,因为关系表非常容易管理,并且绝对可以消除您在这里提到的问题。如果你的站点很小,那么explode和simple join的处理就没有什么区别了,所以理性的论点是这种方法的可持续性有多高,以及是否有其他活着的人愿意继续你的工作。如果我真的继承了那种方法,我会发疯的。特别是考虑到关系表的设置和管理是多么容易。@JosephTorraca,那么拥有一个数据库有什么意义呢?为什么不将所有内容转储到400列宽的CSV中?当然,答案是您无法轻松地对该字段中的数据进行排序、联接、聚合或其他任何操作。您正在使您的数据库对这些数据毫无用处。因为您创建的数据库架构不仅无法利用数据库的设计功能(为什么要使用数据库?如果需要分隔字符串,只需使用平面文件),而且您正在取消MySQL对数据执行更复杂查询的能力。请参阅我的回复,了解我认为更符合@Phil想法的方法。我应该澄清我说的“取决于系统”,因为我认为像expressionengine这样的cms包可能会强制执行非常不寻常的数据安排,其中示例中提供了分隔字符串,以用于完全混乱的模式。我的意思不是说这无论如何都是对的,但有时你可能会被迫成为一个“标准”,或者继承一些你自己永远不会做的东西。好吧,如果这解决了你的问题,那么你能让它被接受吗是的,这只是为了解释我的意思的示例代码。你是对的,我没有接近大规模,数百万的要求,虽然我想。也许几年吧。这是一个很好的关于如何建立关系数据库的例子,我想我会在我的网站上使用这个确切的例子。万分感谢!