2016-10-21 2 views
2

Я пытаюсь использовать функцию $ wpdb-> prepare(), но она возвращает ошибку. Что не так с синтаксисом SQL?

Ошибка базы данных WordPress: [У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи «» wp_spreadsheets' WHERE ID = 6' в строке 1]

SELECT table_name, table_code FROM 'wp_spreadsheets' WHERE id = 6 

код я использую, как следует.

<?php 

// Variables 
$mysqltable_name = 'wp_spreadsheets'; 
$table_id = 6; 

// Query 
$query = $wpdb->prepare('SELECT table_name, table_code FROM %s WHERE id = %d', $mysqltable_name, $table_id); 
$results = $wpdb->get_results($query, ARRAY_A); 

// Results 
if(!empty($results)) { 
    print_r($results); 
} else { 
    $wpdb->print_error(); 
} 

?> 
+2

Вы не можете связывать имена таблиц и имена столбцов, только переменные. – aynber

ответ

1

%s означает, что вы собираетесь использовать varchar вход, который хорошо на вашем PHP конце, где вы передаете $mysqltable_name текст, но на уровне MySQL запрос будет выполнен будет содержать апострофы вокруг $mysqltable_name, так как это varchar. Вам нужно использовать конкатенацию строк или жестко закодированное имя таблицы, чтобы избежать этого в вашем PHP-коде. Если ваше имя table является динамическим, вам необходимо убедиться, что он не будет содержать вредоносный код.

Смежные вопросы