Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要将count(*)添加到此文件和if语句_Php_Mysql_Count - Fatal编程技术网

Php 需要将count(*)添加到此文件和if语句

Php 需要将count(*)添加到此文件和if语句,php,mysql,count,Php,Mysql,Count,当我将SELECT*更改为SELECT count(*)时,脚本将完全停止工作。如果$user>=20的行计数允许插入,则如何将计数(*)添加到此文件和语句 // Include needed files include 'mysql.php'; // Connect to MySQL connectMySQL(); //****** SECURITY CHECK ********* session_start(); if(isset($_SESSION['userid'])){ $u

当我将
SELECT*
更改为
SELECT count(*)
时,脚本将完全停止工作。如果$user>=20的行计数允许插入,则如何将计数(*)添加到此文件和语句

// Include needed files

include 'mysql.php';

// Connect to MySQL

connectMySQL();

//****** SECURITY CHECK *********

session_start();
if(isset($_SESSION['userid'])){
$user = mysql_real_escape_string($_SESSION['userid']); 

//*******************************

  // Retrieves variables through AJAX

$favid = mysql_real_escape_string($_GET['favid']);
// $favid = mysql_real_escape_string($_GET['favid']);

// Firstly, check if article is favourite or not

$query = mysql_query("SELECT * FROM ajaxfavourites WHERE user='$user' AND  favid='$favid'");
$matches = mysql_num_rows($query);

// If it is not favourited, add as favourite

if($matches == '0'){
mysql_query("INSERT INTO ajaxfavourites (user, favid, exptime) VALUES ('$user', '$favid', CURRENT_TIMESTAMP)");

echo "";
}


// Instead, if it is favourited, then remove from favourites

if($matches != '0'){
mysql_query("DELETE FROM ajaxfavourites WHERE user='$user' AND favid='$favid'");

echo "";
}

} else {

// Someone tries to directly access the file!

echo "Invalid session!";

}

谢谢

尝试使用下面的查询,使用下面的查询如果请求的用户会话将超过20,则只执行insert语句,否则insert语句将被忽略

INSERT INTO ajaxfavourites(USER,favid ,exptime)  
SELECT  1 AS USER, 1 AS favid, NOW() AS exptime
FROM ajaxfavourites WHERE USER=1  HAVING COUNT(*) >=20;

请执行必要的步骤以避免SQL注入,同时尝试使用
mysqli*
函数而不是
mysql*
函数

$query = mysql_query("SELECT COUNT(*) as cnt FROM ajaxfavourites WHERE user='$user' AND  favid='$favid'");
$res = mysql_fetch_array($query);

// If it is not favourited, add as favourite

if($res[cnt] == 0){
    mysql_query("INSERT INTO ajaxfavourites (user, favid, exptime) VALUES ('$user', '$favid', CURRENT_TIMESTAMP)");

    echo "";
}

// Instead, if it is favourited, then remove from favourites

if($res[cnt] > 0){
    mysql_query("DELETE FROM ajaxfavourites WHERE user='$user' AND favid='$favid'");

    echo "";
}

我把它解决了。它不起作用的原因是它同时考虑了两个值($user和$favid)。因此,它总是0或1


我必须创建另一个mysql查询,其中只有一个值($user),然后才能得到行数。谢谢大家

当您执行
count(*)
时,请将这样的别名
count(*)指定为cnt
,然后获取数据
mysql\u fetch\u assoc
然后访问计数值
cnt
,**停止使用折旧后的mysql\u*函数**为什么要这样做$matches=mysql_num_rows($query),在SELECT语句返回后,您还可以直接输入行数。所以这就是我能找到的唯一剧本。总有一天我会把它改成mysqli。@BerndBuffen,当我把它改成
if($matches<20)
时,什么也没发生。这就是你的想法吗?如果这是一个愚蠢的问题,很抱歉,但是我需要创建一个名为cnt的专栏吗?我以前试过你的建议,但没用。我试试这个。您的意思是,如果添加收藏夹,则超过计数的收藏夹将被删除?另外,在您的示例中,当收藏夹达到计数20时,将从何处开始删除它们?不,您不必创建列cnt,它是在运行时创建的,并且包含表中符合您的条件的记录数。在我的示例中,如果AjaxFavorites中没有记录,则执行新的插入。如果发现一个或多个记录,则执行删除。请随意更改条件
$res[cnt]>0
以获得所需的结果否,它不起作用。当我将其更改为$res[cnt]>20时,它仍然允许我添加无限的收藏夹,但当我单击“反收藏夹”按钮时,我甚至无法删除它们。知道为什么吗?将
($res[cnt]==0)
更改为
($res[cnt]<20)
也不会停止输入。不知道发生了什么事。从逻辑上讲,这一切都应该起作用。如果一列是int,另一列是varchar,第三列是timestamp,这有关系吗?这几乎像是有什么东西不让它被计数或者什么…@初学者你能再检查一下你的代码吗?我试过了,但是不行。最初的一个是
插入AjaxFavorites(user,favid,exptime)值(“$user”,“$favid”,CURRENT_TIMESTAMP)
我相信你错过了一些有用的东西。@qwikad我已经回滚了它。那么,这些值到哪里去了呢?他们不应该在那里工作吗?我在任何地方都看不到$user$favid。我试过了,但没有成功。它没有添加任何内容。顺便问一下,我应该用你的代码替换代码中的哪一行?您的看起来像是“插入”和“选择”连接在一起。