2017-02-22 17 views
0

Я обычно больше знаком с созданием инструкций INSERT в базах данных SQL или Oracle.Как вставить записи в мою таблицу WordPress?

Однако я создал пользовательскую базу данных CustomerDB и пользовательскую таблицу в WordPress, используя phpMyAdmin.

Я пытаюсь использовать следующий код, чтобы вставить запись в пользовательскую таблицу.

У меня нет ошибок, но запись не вводится.

Обратите внимание, что на данный момент меня не волнует атака с использованием SQL-инъекций.

Я буду иметь дело с тем, что мой код INSERT работает.

Кто-нибудь знает, почему следующий код не вставляет записи в таблицу в WordPress?

<?php 
//make database accessible 
global $wpdb; 
// Get data 
$customername = $_POST["customername"]; 
$custaddress = $_POST["custaddress"]; 
$custcity = $_POST["custcity"]; 
$custstate = $_POST["custstate"]; 
$custzip = $_POST["custzip"]; 


// Database connection 
$conn = mysqli_connect("localhost","myuser","mypass","CustomerDB"); 
if(!$conn) { 
die('Problem in database connection: ' . mysql_error()); 
} 

// Data insertion into database 
$query = "INSERT INTO ‘CustomerDB.wp_customTable’ (‘customername’, ‘custaddress’, ‘custcity’, ‘custstate’,‘custzip’) VALUES ($customername, $custaddress, $custcity, $custstate,custzip)"; 
mysqli_query($conn, $query); 

// Redirection to the success page 
header("Location: thankyou.php"); 
?> 
+0

Похоже, вы пропустили долларовый '' 'c custzip. – thodic

+0

... также неверное использование mysql_error, неправильные кавычки вокруг идентификаторов, имя базы данных и имя таблицы должны быть указаны отдельно, строковые литералы в SQL должны быть заключены в одинарные кавычки, без теста на неудачное выполнение и без получения сообщения об ошибке , потенциально опасные значения, включенные в текст SQL, – spencer7593

ответ

0

В качестве первого шага, изменить код, чтобы проверить, чтобы проверить для успешного выполнения запроса. Если выполнение возвращает FALSE, то извлечение ошибки.

В качестве примера:

if (!mysqli_query($conn, $sql)) { 
    printf('Error: %s',mysqli_error($conn)); 
} 

Сообщение извлекается с помощью функции mysqli_error должно дать нам некоторое представление о том, что проблема есть.

Ошибка не должна быть загадочной. Мы должны ожидать, что что-то может пойти не так. Если наш код этого не делает, он ставит его мизинец в угол его рта с помощью д-ра Эвиля «Я просто предполагаю, что все пойдет по плану. Что?»

Добавив, что небольшая модификация будет идти долгий путь к ответу на вопрос, который был задан вопрос: «? Почему следующий код не вставляя ...»


На вопрос, «Как я вставляю [строки] ... »

Отметим, что в тексте SQL имеется несколько проблем.

Во-первых, выбросьте «smartquotes». Чтобы избежать идентификаторов, заключите их в символы обратного хода. Каждый идентификатор должен быть заключен отдельно. Если CustomerDB это имя базы данных и wp_customTable это имя таблицы, то это не так:

‘CustomerDB.wp_customTable’ 
^      ^

Если мы будем цитировать идентификаторы, то процитировать каждого из идентификаторов отдельно, например:

`CustomerDB`.`wp_customTable` 
^  ^^   ^

Обратите внимание, что эти идентификаторы действительны и на самом деле не требуют обратных ссылок. В этом случае мы могли бы опустить обратные линии. Мы оставим их в качестве демонстрации.

-

обороны Номер 1 от SQL инъекций использовать подготовленные заявления с связываемых заполнителей. Не включайте в текст SQL потенциально опасные значения.

Пример:

$sql = 'INSERT INTO `CustomerDB`.`wp_customTable` (`customername`' 
    . ', `custaddress`, `custcity`, `custstate`, `custzip`)' 
    . ' VALUES (? , ? , ? , ? , ?)'; 

if($sth = mysqli_prepare($conn,$sql)) { 
    mysqli_stmt_bind_param($sth,'sssss' 
     ,$customername 
     ,$custaddress 
     ,$custcity 
     ,$custstate 
     ,$custzip 
    ); 
    if(mysqli_stmt_execute($sth)) { 
     // statement execution successful 
    } else { 
     printf("Error: %s\n",mysqli_stmt_error($sth)); 
    } 
} else { 
    printf("Error: %s\n",mysqli_error($conn)); 
} 

Если есть какая-то причина, почему мы не можем использовать подготовленные заявления с связываемых заполнителей, то любой потенциально небезопасных значений, которые в настоящее время включены в текст SQL должен быть надлежащим образом спасся, используя mysqli_real_escape_string функция.

-

Кроме того, если mysqli_connect не удается, используйте функцию mysqli_connect_error, чтобы получить сообщение об ошибке, а не mysql_error.

+0

и GurV, благодарю вас за вашу доброту. У меня появляется ошибка, с которой я пытаюсь работать сейчас. Я думаю, что я могу разрешить их, но на всякий случай, вот он: Предупреждение: mysqli_stmt_bind_param(): Число элементов в строке определения типа не соответствует числу переменных связывания в C: \ xampp \ htdocs \ Customers \ scripts \ final.php в строке 38 Ошибка: данные не предоставлены для параметров в подготовленном операторе – Tairoc

+0

Первая ошибка является странной, потому что я использую тот же код и то же количество полей. – Tairoc

+0

Второй аргумент msyqli_bind_param - это «строка определения типа». Это должна быть буквальная строка, содержащая символы * пять * '(при условии, что значения передаются как строки). Третий-седьмой аргументы - это * пять * значений, которые должны быть поставлены. И в тексте SQL есть * пять * bind placeholders (знаки вопросительного знака). Я смотрю на код в своем ответе, и я не вижу проблемы. Мне кажется. Если вы изменили этот код, убедитесь, что в mysqli_stmt_bind_param есть * семь * аргументов, начиная с дескриптора оператора, за которым следует строка типа – spencer7593

1

Используйте обратные кавычки вместо кавычек:

$query = "INSERT INTO CustomerDB.`wp_customTable`(`customername`, `custaddress`, `custcity`, `custstate`,`custzip`) VALUES ($customername, $custaddress, $custcity, $custstate, custzip)";