Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 试图为我的未定义索引找到解决方案_Php_Mysql_Sql_Session_Pdo - Fatal编程技术网

Php 试图为我的未定义索引找到解决方案

Php 试图为我的未定义索引找到解决方案,php,mysql,sql,session,pdo,Php,Mysql,Sql,Session,Pdo,我有一个带有类别列表的表,还有一个搜索类别标题的表单 我想这样做,但我有两个通知,我无法找到一个解决方案已经有几天了 我知道如果我把@放在sql语句之前,我就能解决我的问题,但我认为这是不对的 当我传递一个值时,搜索表单工作正常,但当我不传递任何值时,我总是会看到这样一个通知:“注意:未定义索引:where”,因为加载类别列表的选择是在没有向我的sql语句中使用的$\u会话['where']传递任何值的情况下完成的 有人想办法解决这个问题吗 我有这样的错误: 注意:未定义索引:在我的“从类别中选

我有一个带有类别列表的表,还有一个搜索类别标题的表单

我想这样做,但我有两个通知,我无法找到一个解决方案已经有几天了

我知道如果我把@放在sql语句之前,我就能解决我的问题,但我认为这是不对的

当我传递一个值时,搜索表单工作正常,但当我不传递任何值时,我总是会看到这样一个通知:“注意:未定义索引:where”,因为加载类别列表的选择是在没有向我的sql语句中使用的
$\u会话['where']
传递任何值的情况下完成的

有人想办法解决这个问题吗

我有这样的错误:

注意:未定义索引:在我的“从类别中选择*{$\u会话['where']}…”

我知道我有这样的错误是因为

我的php代码用于存储在会话中用户在我的搜索字段中传递的sql语句:

if(isset($_POST['sendForm']))
{
$search = $_POST['search'];
if(!empty($search) && $search != 'Search...:')
{
    $_SESSION['where'] = "WHERE t LIKE '%$search%'";
    header('Location: index2.php?exe=posts/categories');
}
else
{
    unset($_SESSION['where']);
    header('Location: index2.php?exe=posts/categories');
}
}
然后我执行sql语句:

我的sql语句php代码:

$pag = (empty($_GET['pag']) ? '1' : $_GET['pag']);
$max = 3; 
$begin = ($pag * $max) - $max;

$readCategory = $pdo->prepare("SELECT * FROM categories {$_SESSION['where']} ORDER BY name DESC LIMIT :begin, :max");
$readCategory->bindParam(':begin', $begin, PDO::PARAM_INT);
$readCategory->bindParam(':max', $max, PDO::PARAM_INT);
$readCategory->execute();



$num_readCategory = $readCategory->rowCount();

if(!$num_readCategory >= 1)
{
echo 'There are not categories yet';
}

如果您的搜索项为空,则您正在取消设置
$\u会话['where']
变量,因此该变量未定义

相反,只需将其设置为空字符串:

else
{
    $_SESSION['where'] = "";
    header('Location: index2.php?exe=posts/categories');
}

您应该像使用$\u GET参数一样解决问题:

$where = isset($_SESSION['where']) ? $_SESSION['where'] : '';
$readCategory = $pdo->prepare("SELECT * FROM categories {$where} ORDER BY name DESC LIMIT :begin, :max");
此外,我通常将此类访问封装在函数/方法中:

function get_session_param($name, $default = null) {
   if (isset($_SESSION[ $name ])) {
       return $_SESSION[ $name ]; 
   }
   return $default;
}

session_start()加载?另外,为什么我觉得我以前见过这个问题/代码;(谢谢你的回答……这很有道理,但我也犯了同样的错误!