插入-PHP&;SQL Server
我不知道发生了什么,但它就是不想起作用 我在提交表单时不断遇到此错误: 数组([0]=>Array([0]=>22001[SQLSTATE]=>22001[1]=>8152[code]=>8152[2]=>[Microsoft][SQL Server原生客户端10.0][SQL Server]字符串或二进制数据将被截断。[消息]=>[Microsoft][SQL Server原生客户端10.0][SQL Server]字符串或二进制数据将被截断。[1]=>Array([0]=>01000[SQLSTATE]=>01000][1] =>3621[code]=>3621[2]=>[Microsoft][SQL Server本机客户端10.0][SQL Server]语句已终止。[消息]=>[Microsoft][SQL Server本机客户端10.0][SQL Server]语句已终止。) 以下是PHP代码:插入-PHP&;SQL Server,php,sql,sql-server,insert,Php,Sql,Sql Server,Insert,我不知道发生了什么,但它就是不想起作用 我在提交表单时不断遇到此错误: 数组([0]=>Array([0]=>22001[SQLSTATE]=>22001[1]=>8152[code]=>8152[2]=>[Microsoft][SQL Server原生客户端10.0][SQL Server]字符串或二进制数据将被截断。[消息]=>[Microsoft][SQL Server原生客户端10.0][SQL Server]字符串或二进制数据将被截断。[1]=>Array([0]=>01000[SQL
<?php
$who = $_REQUEST["who"];
$what = $_REQUEST["what"];
$serverName = "xxx";
$uid = "xxx";
$pwd = "xxx";
$databaseName = "xxx";
$connectionInfo = array( "UID"=>$uid,
"PWD"=>$pwd,
"Database"=>$databaseName);
/* Connect using SQL Server Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$tsql = "insert into Suggestions (Who, What, Votes) values ('$who','$what','10')";
/* Execute the query. */
$stmt = sqlsrv_query( $conn, $tsql);
if ( $stmt )
{
$something = "Submission successful.";
}
else
{
$something = "Submission unsuccessful.";
die( print_r( sqlsrv_errors(), true));
}
$output=$something;
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
很抱歉,它的格式不正确。我认为您的列(字段)类型有错误,请尝试仅插入一个字符,然后提交成功,尝试扩展字段类型…,即增加字符数…等。当您输入一个包含多个字符的文本字段时,会发生错误。错误消息“字符串或二进制数据将被截断”意味着您创建了一个文本列仅限于一个字符的表。如果
CREATE
语句说它们是CHAR
,而不是CHAR(somenumber)
或NVARCHAR(somenumber)
,就会发生这种情况
但是,您有一个更大的问题:
$tsql = "insert into Suggestions (Who, What, Votes) values ('$who','$what','10')";
您忘记了对这些文本字符串进行SQL转义。如果它们包含“
字符,您的查询将中断,任何攻击者都可以通过将其注入查询来执行任意SQL。很快,您的数据库就会被恶意软件链接破坏,甚至更糟
奇怪的是,sqlsrv
驱动程序似乎没有为您提供正确的转义功能,但是仅仅用'
替换'
,对于SQL Server来说就足够了。但是,您最好使用以下方法避免此问题:
你能给我们看一下这个表的定义吗?这个表的SQL是
descripe Suggestions
@JGB146:你的意思是:sp_help Suggestions
或sp_columns Suggestions
-descripe是Oracle/MySQLDone,我用它更新了一个问题:)哇!它只需要1个字符就可以了!谢谢!现在尝试增加字符数但是非常感谢你的代码+建议,你真的让我哑口无言了,这样我就可以理解了。我只是php新手,所以非常感谢。:)
TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME PRECISION LENGTH SCALE RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SS_DATA_TYPE
DB_11967_suggestions dbo Suggestions Who 12 varchar 1 1 1 12 1 1 YES 39
DB_11967_suggestions dbo Suggestions What 12 varchar 1 1 1 12 1 2 YES 39
DB_11967_suggestions dbo Suggestions Votes 4 int 10 4 0 10 1 4 3 YES 38
$tsql = "insert into Suggestions (Who, What, Votes) values ('$who','$what','10')";
sqlsrv_query(
$conn,
'INSERT INTO Suggestions (Who, What, Votes) VALUES (?, ?, 10)',
array($who, $what)
);