Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入-PHP&;SQL Server_Php_Sql_Sql Server_Insert - Fatal编程技术网

插入-PHP&;SQL Server

插入-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

我不知道发生了什么,但它就是不想起作用

我在提交表单时不断遇到此错误:

数组([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
$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)
);