PHP表单到MSSQL 2005,自动生成ID(alter table add)

时间:2011-05-02 21:57:27

标签: php sql-server forms alter-table

有人可以帮忙吗?我确实得到了与db的连接并且可以检索数据和“post”,唯一的断点是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 :(得分:0)

你的例外是:

  

字符串或二进制数据将被截断。声明已经终止。

您的ALTER字符串实际上已放入LASTNAME列。 SQL Server告诉您,您的长字符串已被截断为LASTNAME列的长度。

您基本上是为数组提供4个字符串值。前三个被接受作为声明的参数。一个或多个不符合它试图装入桌子的列的长度。

请检查这些列的varchar()定义。它们是否比提供的琴弦小?

请改用:

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