Обновление таблицы MSSQL с помощью PHP + sqlsrv

Я пытаюсь сделать самую простую вещь...

У меня есть форма с 2 полями. Я хочу ввести данные в эти поля и попросить их записать эти данные в мою базу данных (mssql с использованием драйвера sqlsrv).

Подключение к БД не является проблемой. Вот мой процессор форм (только настроенный для обновления количества (qnty) в данный момент):

require_once 'dbconnect.php';

$partno = $_POST["partno"];
$qnty = $_POST["qnty"];

$sql = 'UPDATE WestDevDB SET LocationQty = $_POST["qnty"]';

$result = sqlsrv_query($conn,$sql) or die(sqlsrv_errors());

Все, что я получаю, это ошибка:

Примечание: преобразование массива в строку в filepath\file.php в строке 8 Array

и ничего не пишет.

Я пытался изменить $_POST["qnty"] в $_POST["qnty"][0] думая, что это решит проблему, но это не имеет значения.

Есть мысли по этому поводу?

3 ответа

Решение

Базовый синтаксис PHP 101: 'строки в кавычках НЕ интерполируют переменные. Это означает, что ваше определение запроса:

$sql = 'UPDATE WestDevDB SET LocationQty = $_POST["qnty"]';

отправляет буквенные символы $, _, P и т.д... как значение для сравнения LocationQty против. Это также означает, что ваш запрос вызывает синтаксическую ошибку, потому что $_ etc... не является допустимым именем поля, практически в любой базе данных под солнцем.

И даже если 'Строки в кавычках DID интерполируют переменные:

а) вы были бы широко открыты для атак инъекций SQL в любом случае.
б) Ключи массива не могут заключаться в кавычки внутри строк, если вы не используете {} синтаксис:

$sql = "UPDATE ... = {$_POST['qnty']};"
or
$sql = "UPDATE ... = " . $_POST['qnty'];

Вы должны использовать params, чтобы избежать внедрения SQL и ошибок при конкатенации строк.

$qnty = $_POST["qnty"];
//sanitize $qnty ( !is_null, is_numeric, ... )
$sql = "UPDATE WestDevDB SET LocationQty = ( ?)";
$params = array( $qnty );

$stmt = sqlsrv_query( $conn, $sql, $params);
if( $stmt === false ) {
     die( print_r( sqlsrv_errors(), true));
}

Дополнительные примеры обновления sqlsrv_query на Microsoft MSDN.

Ни один из ответов выше не отвечает на вопрос. У вас нет заявления ГДЕ. Вы пытаетесь установить LocationQty для каждой строки в таблице базы данных. Вот почему это не работает

Другие вопросы по тегам