【问题标题】:PHP form to MSSQL 2005 with auto ID generation via (alter table add)通过(更改表添加)自动生成 ID 的 PHP 表单到 MSSQL 2005
【发布时间】:2011-05-02 21:57:26
【问题描述】:

有人可以帮忙吗?我确实连接到 db 并且可以检索数据和“发布”,唯一的断点是 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>";
        }
    }}

【问题讨论】:

  • sys 模式中的表如何?我认为 SQL Server 不允许这样做。但您也不应该仅仅为了插入新行而运行ALTER TABLE 语句。 (尽管我怀疑它可能只是试图将整个ALTER TABLE 字符串插入LASTNAME

标签: php sql-server forms alter-table


【解决方案1】:

你的例外是:

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

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

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

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

改用这个:

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

【讨论】:

  • 谢谢你 p.campbell 你击中了靶心。
猜你喜欢
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2021-10-30
  • 2016-08-29
  • 2013-08-12
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多