sql server - PHP表单到MSSQL 2005,通过(alter table add)自动生成ID


sql server - PHP form to MSSQL 2005 with auto ID generation via (alter table add)

谁能帮帮我?我确实得到连接到数据库,可以检索数据和"post",唯一的断点是ContactID记录,这是主要的和必需的。我相信它与我的Alter table行有关,我只是不知道在哪里。

场景如下:

  • 表单是用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>";
        }
    }}

您的例外是:

字符串或二进制数据将被截断。语句已被终止。

看起来您的ALTER字符串实际上被放置在LASTNAME列中。SQL Server告诉你,你的长字符串已经被截断到LASTNAME列的长度。

你基本上为数组提供了4个字符串值。前3个被接受为语句的参数。一个或多个列的长度不适合它在表中试图容纳的列。

检查这些列的varchar()定义。它们比提供的字符串小吗?

用这个代替:

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