谁能帮帮我?我确实得到连接到数据库,可以检索数据和"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']);