Обновление таблицы 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 для каждой строки в таблице базы данных. Вот почему это не работает