Неопределенная переменная: row?

Вопрос или проблема

Я пытаюсь выбрать post_title из wp_posts с помощью запроса, который я сделал следующим образом:

     global $wpdb;
     $test = $wpdb->get_var( 
        $wpdb->prepare(" SELECT post_title FROM {$wpdb->wp_posts}" )
     );
     echo "$test";

ПРАВКА: теперь мне выводит:

Notice: Undefined property: wpdb::$wp_posts in /../../../../wp-includes/wp-db.php on line 566

Warning: Missing argument 2 for wpdb::prepare(), called in /../../../../wp-content/themes/pms72/page-home.php on line 73 and defined in /../../../../wp-includes/wp-db.php on line 992

Во-первых, это не $wpdb->wp_posts, а просто $wpdb->posts.

Во-вторых, вы неправильно используете prepare(). Вы используете prepare, когда у вас есть какие-то переменные данные, которые нужно безопасно вставить в строку запроса, не иначе. Использование prepare для известной строки ничего не делает и вызывает предупреждение.

Например:

$data="example string"
$query = $wpdb->prepare("SELECT post_title FROM {$wpdb->posts} where post_title = %s", $data);

И затем $query будет строкой SQL, которую вы сможете безопасно отправить в $wpdb->query. Строка будет экранирована, заключена в кавычки и вставлена туда, где стоит %s.

Если у вас нет переменных данных, которые нужно подготовить для вставки в запрос, нет смысла вызывать prepare.

В вашем случае, поскольку вы не вставляете переменные в SQL, просто пропустите вызов prepare.

$test = $wpdb->get_var( "SELECT post_title FROM {$wpdb->posts}" );

Вы должны быть в состоянии получить имя таблицы posts с помощью.

$tableName = $wpdb->prefix . 'posts';

Таким образом, ваш скрипт станет:

global $wpdb;
$tableName = $wpdb->prefix . 'posts';
$test = $wpdb->get_var( 
   $wpdb->prepare(" SELECT post_title FROM {$tableName}" )
);
var_dump($test);

if($row>0){
session_start();
$_SESSION[‘admin_id’]= ‘admin_id’;
$_SESSION[‘username’]= ‘username’;
header(“location:http://”.$_SERVER[‘HTTP_HOST’].dirname($_SERVER[‘PHP_SELF’]).”/admin.php”);
}

я получаю ошибку при запуске localhost, говорится неопределенная переменная $row

.

Ответ или решение

Ошибка "Undefined variable: row" указывает на попытку использовать переменную $row, которая не была определена до этого момента в коде. Это может произойти, если разработчик, возможно, ожидал, что переменная будет задана при выполнении какого-то действия, например, запроса к базе данных, но это действие не было выполнено или не вернуло ожидаемых результатов.

Для начала, давайте разберем предоставленные фрагменты кода:

  1. Запрос к базе данных:

    Вы используете объект $wpdb для выполнения SQL-запросов в базе данных WordPress. Из первого фрагмента кода видно, что вы пытаетесь получить post_title из таблицы wp_posts. Однако, в вашем запросе вы использовали неправильное имя для таблицы в $wpdb, что стало одной из причин, по которым вы получили уведомление об ошибке. Правильное использование будет $wpdb->posts.

  2. Использование prepare():

    Метод prepare() нужен для безопасной вставки переменных данных в запрос, чтобы избежать SQL-инъекций. Если у вас нет переменных данных, которые нужно безопасно вставить в строку SQL, вы можете опустить этот шаг. В вашем случае просто используйте:

    $test = $wpdb->get_var("SELECT post_title FROM {$wpdb->posts}");
  3. Использование переменной $row:

    В приведенном в вами коде условие if($row > 0) использует переменную $row, которая нигде не была определена. Это и вызывает ошибку "Undefined variable". Вам нужно инициализировать переменную $row до использования. Например, если вы ожидаете откуда-то получить данные в $row, сначала убедитесь, что запрос или другая операция для установки этой переменной успешно выполняется. Это может быть результат запроса к базе данных или иная операция.

    Пример корректного подхода:

    $row = $wpdb->get_row("SELECT ..."); // Предположим, что вы ожидаете вернуть определенные данные из базы данных
    
    if($row && count($row) > 0){
        session_start();
        $_SESSION['admin_id'] = 'admin_id';
        $_SESSION['username'] = 'username';
        header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/admin.php");
        exit; // Не забудьте exit после header для прекращения выполнения скрипта
    }

При написании кода всегда помните о важности инициализации переменных перед их использованием. Это предотвратит неожиданные ошибки и улучшит читаемость и устойчивость вашего кода.

SEO Совет:

  1. Используйте ключевые слова, такие как "ошибка Undefined variable", "wpdb", "WordPress", чтобы привлечь нужную аудиторию.
  2. Напоминайте читателю важность безопасности в использовании базы данных и избегания SQL-инъекций.

Таким образом, ваша статья будет понятна, полезна и оптимизирована для поисковых систем.

Оцените материал
Добавить комментарий

Капча загружается...