Неизвестный столбец в «поле ввода»

0

Я перехожу к вставке в таблицу mysql через PDO. когда я запускаю код, я получаю ошибку: Столбец не найден: 1054 Неизвестный столбец "тестирование" в "списке полей" при использовании тестирования в качестве первого ввода для первой строки в HTML-коде ниже. '

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO test (Name, Test)  VALUES ($first, $Test)";

    $conn->exec($sql);
    echo "New record created successfully";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn = null;
?>

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1">
<tr>
<td><form name="form1" method="post" action="page_ac.php">
<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr>
<td colspan="3"><strong>Test </strong></td>
</tr>
<tr>
<td width="71">Name</td>
<td width="6">:</td>
<td width="301"><input name="name" type="text" id="name"></td>
</tr>
<tr>
<td>test</td>
<td>:</td>
<td><input name="Test" type="text" id="Test"></td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit" name="Submit" value="Submit"></td>

</tr>
</table>
</form>
</td>
</tr>
</table>
  • 0
    Вы не указали свои значения в кавычках, поэтому вам кажется, что вы ссылаетесь на столбец, а не на строковую константу. Кроме того, ваш код очень восприимчив к атакам с использованием инъекций, вы должны читать подготовленные операторы и связанные параметры, а не просто выполнять запросы напрямую.
  • 0
    Спасибо, это работает сейчас. Это первый скрипт, который я написал в php. Я буду смотреть на инъекционные атаки. Вся помощь оценена
Теги:

1 ответ

1

Похоже, что вы не избегаете значений правильно. Я бы использовал метод PDO для подготовки значений вашей вставки, а затем выполнил запрос со значениями в виде массива. Следующий код будет избегать входных значений в виде строк в PDO.

// replace your variables with question marks
$sql = "INSERT INTO test (Name, Test)  VALUES (?,?)";
// prepare the sql to execute and get passed back a resource
$stmt = $conn->prepare($sql);
// pass the parameters as you would of in the query, in the array
// first variable matches first question mark and so forth
$stmt->execute(array($first,$Test));

Всегда рекомендуется, чтобы вы избегали и дезактивировали свой пользовательский ввод, прежде чем использовать его в запросе, иначе вы разрешите возможную инъекцию SQL. Метод подготовки PDO помогает в этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню