Форма PHP в MSSQL 2005 с автоматической генерацией идентификатора через (добавление таблицы изменений) - PullRequest
1 голос
/ 03 мая 2011

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

Вот сценарий:

  • Форма написана на php.
  • Форма публикует данные в MSSQL 2005
  • ContactID не может быть нулевым и должен назначаться автоматически.
  • При отправке я получаю исключение: Строка или двоичные данные будут усеченный. Заявление было прекращено.

Вот код php:

    if(isset($_GET['action']))
    {

    if($_GET['action'] == 'add')

    {
    // this is where inserting data beggins

    $insertSql = "INSERT INTO sys.CONTACT (LASTNAME, FIRSTNAME, EMAIL)

    VALUES (?,?,?)";

    $params = array(("Alter table sys.CONTACT add ProgramID int IDENTITY(9000001,1) NOT NULL, CONTACTID  AS ('CCRMS'+CONVERT(varchar(7),ProgramID,(0)))"),
        &$_POST['lastName'],
        &$_POST['firstName'],
        &$_POST['emailAddress']);

    $stmt = sqlsrv_query($conn, $insertSql, $params);

    if($stmt === false)

    {/*Handle the case of a duplicte e-mail address.*/

        $errors = sqlsrv_errors();

            if($errors[0]['code'] == 2601)

            {
                echo "The e-mail address you entered has already been used.</br>";
            }

            /*Die if other errors occurred.*/

            else
            {
                die(print_r($errors, true));
            }
     }

     else

        {
            echo "Registration complete.</br>";
        }
    }}

1 Ответ

0 голосов
/ 03 мая 2011

Исключением является:

Строка или двоичные данные будут обрезаны.Оператор был прерван.

Похоже, ваша строка ALTER фактически помещена в столбец LASTNAME.SQL Server сообщает, что ваша длинная строка была усечена до длины столбца LASTNAME.

Вы в основном предоставляете 4 строковых значения для массива.Первые 3 принимаются как аргументы к заявлению.Один или несколько не соответствуют длине столбца, в который он пытается вписаться в таблицу.

Проверьте определения varchar() этих столбцов.Они меньше поставляемых строк?

Используйте вместо этого:

  $params = array(&$_POST['lastName'],
                  &$_POST['firstName'],
                  &$_POST['emailAddress']);
...