2015-04-17 4 views
2

Я пытаюсь сделать простейшую вещь ...Обновление таблицы MSSQL с помощью PHP + sqlsrv

У меня есть форма с 2 полями. Я хочу ввести данные в эти поля и записать их в мой db (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()); 

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

Notice: Array to string conversion in filepath\file.php on line 8 Array

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

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

Любые мысли по этому поводу?

ответ

3

Базовый PHP-синтаксис 101: ' -quoted strings do NOT Интерполировать переменные. Это означает, что ваше определение запроса:

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

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

И даже если ' -quoted строки DID интерполировать переменные:

а) вы бы широко открыты для sql injection attacks в любом случае.
ключи б) Массив не может быть заключено в кавычки внутри строки, если вы не используя {} синтаксис:

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

Вы должны использовать 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 update samples at Microsoft MSDN.