Php 如何返回计数函数的数目?
我需要测试我的查询是否返回Php 如何返回计数函数的数目?,php,mysql,sql,Php,Mysql,Sql,我需要测试我的查询是否返回1或0(因此是否有与输入的键匹配的键) 这是我的密码: $key=$_POST['key']; $queryKey = mysql_query("SELECT COUNT(*) FROM `smf_invites` WHERE `key` = '$key'"); $query = mysql_num_rows($queryKey); if( !empty ($key)) { echo 'You have entered a key'; if
1
或0
(因此是否有与输入的键匹配的键)
这是我的密码:
$key=$_POST['key'];
$queryKey = mysql_query("SELECT COUNT(*) FROM `smf_invites` WHERE `key` = '$key'");
$query = mysql_num_rows($queryKey);
if( !empty ($key))
{
echo 'You have entered a key';
if (!empty ($query))
{
echo 'A key is corresponding';
}
}
编辑:
$connect=新的mysqli(“XXX”、“XXX”、“XXX”、“smf”)
现在我的代码给我的错误如下
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in D:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\registration.php on line 32
Warning: mysqli_query() expects at least 2 parameters, 1 given in D:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\registration.php on line 33
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in D:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\registration.php on line 34
此代码存在多个问题
$\u POST['key']
,您将收到PHP通知$queryKey=mysql\u查询(“从`smf\u邀请`WHERE`key`='$key`中选择COUNT(*))代码>将始终返回一行。因此,检查返回的行数将不起作用
if( isset($_POST['key']))
{
echo 'You have entered a key';
$key = mysql_real_escape_string($_POST['key']);
$queryKey = mysql_query("SELECT 1 FROM `smf_invites` WHERE `key` = '$key'");
if (mysql_num_rows($queryKey))
{
echo 'A key is corresponding';
}
}
。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO
您的代码对您也是开放的我为您创建了一个类,并举例说明
<?php
class MyDb {
protected $link;
public function __construct() {
if (!$this->link = mysql_connect('localhost', 'user', 'password')) {
echo 'Could not connect to mysql';
exit;
}
if (!mysql_select_db('table_name', $this->link)) {
echo 'Could not select database';
exit;
}
}
public function exist($id) {
if (is_int($id)) {
$sql = "SELECT COUNT(*) FROM smf_invites WHERE `key` = '$id'";
$result = mysql_query($sql, $this->link);
return mysql_num_rows($result);
} else {
return false;
}
}
}
$x = $_POST['key'] = 1;
if(!empty($_POST['key'])) {
$db = new MyDb();
if($db->exist($x)) {
echo "exist";
} else {
echo "no exist";
}
}
结合约翰的回答
根据您新编辑的代码:
mysqli
要求为函数传递DB连接
更改:
$key = mysqli_real_escape_string($_POST['key']);
致:
或者(使用其中的变量$key
)
然后是:
$queryKey = mysqli_query("SELECT 1 FROM `smf_invites` WHERE `key` = '$key'");
致:
故障排除/调试 添加到文件的顶部,这将有助于查找错误
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
在打开PHP标记后立即将错误报告添加到文件顶部,例如提示:如果numrows不仅仅是零…根据键的生成方式,您有MySQL注入漏洞。请改用mysqli
。@uoɯuoɹqɔ单独使用mysqli
并不能防止注入<代码>mysqli
与准备好的语句一起执行。;-)@Rameleu您使用哪个MySQL API连接,以及如何连接?你需要精确的回答。谢谢你的快速回答。我将此作为输出:警告:mysql_num_rows()希望参数1是resource,布尔值在第30行的D:\Program Files(x86)\EasyHP-DevServer-14.1VC11\data\localweb\registration.php中给出。您的查询失败。使用mysql_error()找出原因。另外,您是否验证了与MySQL的连接是否成功?好的,这个答案帮助我找到了问题所在。查询现在正在识别是否存在对应的键。非常感谢你的帮助,我很感激!
$queryKey = mysqli_query("SELECT 1 FROM `smf_invites` WHERE `key` = '$key'");
$queryKey = mysqli_query($connect,
"SELECT 1 FROM `smf_invites` WHERE `key` = '$key'")
or die(mysqli_error($connect));
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code