我不确定如何在PHP& MySQL的;
但基本上,我只想检查表中是否存在行,如果存在,则返回错误,例如:
$exists = MYSQL CODE TO CHECK HOW MANY ROWS INCLUDE BADGE_ID
if($exists >= 1)
{
$errors[] = "Exists.";
}
类似的东西,因为我正在编写一个小商店脚本,我希望它检查以确保他们没有badge_id
。数据库的结构为user_id
和badge_id
(user_id = 1
,badge_id = 1
;例如)
答案 0 :(得分:1)
//Mysql
$res = mysql_query("YOUR QUERY");
if(mysql_num_rows($res) > 0) {
$errors[] = "Exists.";
}
//PDO
$query = $db->prepare("YOUR QUERY");
$ret = $query->execute();
if($ret && $query->rowCount() > 0) {
$errors[] = "Exists.";
}
答案 1 :(得分:0)
此查询
$query=mysql_query("SELECT * from table WHERE userid = 1 AND badgeid = 1");
并在php中
if(mysql_num_rows($query)>0){
// whatever you want if match found
}else{
echo "No match Found".
}
答案 2 :(得分:0)
$result = mysql_query("SELECT COUNT(*) FROM table WHERE userid = 1 AND badgeid = 1 LIMIT 1") or die(mysql_error());
if (mysql_result($result, 0) > 0)
{
echo 'exist';
}
else
{
echo 'no';
}
答案 3 :(得分:0)
$sql = "SELECT COUNT(*) FROM `table_name` WHERE `user_id` = '1' AND `badge_id` = '1' "
$exists = mysql_query($sql) ;
if(mysql_num_rows($exists) >= 1) {
$errors[] = "Exists.";
}else {
// doesn't exists.
}
答案 4 :(得分:0)
尝试使用PDO而不是旧的mysql_query()函数,因为自PHP 5.5以来它们已被弃用。
对于简单的查询:
$slcBadge = $con->query('SELECT badge_id FROM badges');
if ($slcBadge->rowCount() > 0) {
$errors[] = 'Exists.';
}
或者,如果您想从单个用户获取所有行:
$sqlBadge = 'SELECT id_badge FROM badges WHERE id_user = :idUser';
$slcBadge = $con->prepare($sqlBadge);
$slcBadge->bindParam(':idUser', $idUser, PDO::PARAM_INT);
$slcBadge->execute();
if ($slcBadge->rowCount() > 0) {
$errors[] = 'Exists.';
}
请注意,在第二段代码中,我使用了prepare()
和execute()
而不是query()
。这是为了保护您免受SQL injection的查询。通过使用prepare(),您可以修复查询的构造,这样,如果用户输入查询字符串作为值,则不会执行该查询。如果用户可以输入将在查询中使用的值,则只需准备查询,否则query()就可以了。查看注射链接以获取更多详细信息。
答案 5 :(得分:0)
您的PHP版本非常重要:
mysql_*
功能自 5.4 和MySQL的: 现在不推荐使用此扩展,并且当通过mysql_connect(),mysql_pconnect()或通过隐式连接建立与数据库的连接时,将生成弃用警告:使用MySQLi或PDO_MySQL代替 使用libmysql时,不再支持LOAD DATA LOCAL INFILE处理程序。以稳定性问题而闻名 添加了对MySQL 5.6.6 +
提供的SHA256身份验证的支持
供参考,请参阅the changelog
首先,我假设您正确索引字段refer to this article我在Stack Exchange上发布。
其次,您需要考虑效率,具体取决于此表的数量:当仅需要计算记录时,执行SELECT *
是不好的做法 - mysql将缓存行数并使你的SELECT Count(*)
更快。使用索引,这是更有效的。
我只想考虑一下这个问题:
$dsn = 'mysql:host=127.0.0.1;dbname=DATABASE';
$db = new PDO($dsn, 'username', 'password', array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
));
注意: 如果您的用户已通过localhost授予访问权限,那么host = 127.0.0.1,那么您需要这个来声明localhost - 或者将用户权限授予127.0.0.1
注意: 使用SET NAMES还有一个来自5.3的PDO驱动程序的错误(我相信),攻击者可以注入nullbytes和backspace字节来删除删除然后注入查询。
// WARNING: you still need to correctly sanitize your user input!
$query = $db->prepare('SELECT COUNT(*) FROM table WHERE user_id = ? AND badge_id = ?');
$query->execute(array((int) $userId, (int) $badgeId));
$total = $query->fetchAll();