Вопрос или проблема
Я пытаюсь выбрать 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
, которая не была определена до этого момента в коде. Это может произойти, если разработчик, возможно, ожидал, что переменная будет задана при выполнении какого-то действия, например, запроса к базе данных, но это действие не было выполнено или не вернуло ожидаемых результатов.
Для начала, давайте разберем предоставленные фрагменты кода:
-
Запрос к базе данных:
Вы используете объект
$wpdb
для выполнения SQL-запросов в базе данных WordPress. Из первого фрагмента кода видно, что вы пытаетесь получитьpost_title
из таблицыwp_posts
. Однако, в вашем запросе вы использовали неправильное имя для таблицы в$wpdb
, что стало одной из причин, по которым вы получили уведомление об ошибке. Правильное использование будет$wpdb->posts
. -
Использование
prepare()
:Метод
prepare()
нужен для безопасной вставки переменных данных в запрос, чтобы избежать SQL-инъекций. Если у вас нет переменных данных, которые нужно безопасно вставить в строку SQL, вы можете опустить этот шаг. В вашем случае просто используйте:$test = $wpdb->get_var("SELECT post_title FROM {$wpdb->posts}");
-
Использование переменной
$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 Совет:
- Используйте ключевые слова, такие как "ошибка Undefined variable", "wpdb", "WordPress", чтобы привлечь нужную аудиторию.
- Напоминайте читателю важность безопасности в использовании базы данных и избегания SQL-инъекций.
Таким образом, ваша статья будет понятна, полезна и оптимизирована для поисковых систем.