Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 对else语句的质疑_Php_Mysql - Fatal编程技术网

Php 对else语句的质疑

Php 对else语句的质疑,php,mysql,Php,Mysql,我有下面的代码从数据库中检索行,但如果我在“assign_id_input”中输入数据库中不存在的id,它将不会执行else语句并显示“Error” $assign_id_input = $_POST['assign_id_input']; $search_assign_user_id = mysql_query("SELECT * FROM free_ebook WHERE useid = $assign_id_input;")or die(mysql_error()); while($a

我有下面的代码从数据库中检索行,但如果我在“assign_id_input”中输入数据库中不存在的id,它将不会执行else语句并显示“Error”

$assign_id_input = $_POST['assign_id_input'];

$search_assign_user_id = mysql_query("SELECT * FROM free_ebook WHERE useid = $assign_id_input;")or die(mysql_error());

while($assign_user_id_array = mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) {
    $filtered_assign_user_id_array = array_filter($assign_user_id_array);

    if(count($filtered_assign_user_id_array) > 0) {
        echo 'No Error';
    }
    else{
        echo 'Error';
    }
}

您的代码没有插入,并且有点不可读,但在我看来,问题在于您正在while循环中赋值。我想你应该用这个

while($assign_user_id_array == mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) {

您的错误不会显示,因为您的代码从未进入while循环,因为
$search\u assign\u user\u id
中有0行,因此
mysql\u fetch\u array()
将返回
FALSE

如果您的查询返回了任何行,您应该使用
mysql\u num\u rows()
进行检查,然后您可以进入while循环

$assign_id_input = $_POST['assign_id_input'];

$search_assign_user_id = mysql_query("SELECT * FROM free_ebook WHERE userid = $assign_id_input;")or die(mysql_error());

if (mysql_num_rows($search_assign_user_id) > 0) {

    while($assign_user_id_array = mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) {
        $filtered_assign_user_id_array = array_filter($assign_user_id_array);
        echo 'No Error';
    }
} else {
    echo 'Error';
}

在while循环之前使用
mysql\u infected\u rows()
请缩进您的代码。使用var\u dump()检查您的查询返回到数组中的内容,您会得到启发!令人惊讶的是,没有人提出关于注入和库的问题,所以:请不要尝试修复安全性,所以从一开始就不要将
post
变量直接放入查询中。它是不受信任的数据,可能包含各种内容(如SQL命令)。此外,您还使用了一个不推荐使用的库(mysql*)。检查所有关于这些功能的手册页面上的红色大错误(您确实检查了手册页面,是吗?),这不是问题。这是一种获取表行的方法。如果mysql\u fetch\u array retuns为FALSE,则while循环将关闭。请阅读php手册。mysql_impacted_rows()已弃用,它仅适用于插入、更新、替换或删除,而不适用于选择。它以下面的方式为我工作$sql=“从abc选择*”$结果=mysql_查询($sql)或(“!sql”);如果(mysql_impacted_rows()){echo“hi”}或者{echo“bye”}它可能工作得很好,但是它返回的值实际上并不是您真正想要的值。为了将来的使用,这个函数已被弃用,将被删除。哦,我明白了。谢谢兄弟。