2014-10-30 47 views
0

我想根据一些输入生成一个SQL。我有一个预定义的SQL(在这里我做一些替换),它将使用这些输入来生成使用ODBC连接所需的SQLPHP在我的输出中放置奇怪的字符

我已经将预定义的SQL存储在JS文件中。

下面是相同的代码:

function get_Result($query_passed){ 
    //echo "inPHP"; 
     $conn=odbc_connect(connectiondetails) or die(odbc_errormsg()); 
     $resultset = odbc_exec($conn, $query_passed); 

    $rowValues = []; 

    while(odbc_fetch_array($resultset)){ 
     $rowValue = odbc_result($resultset,1); 
     array_push($rowValues,$rowValue); 
    } 

    echo $rowValues[1].$rowValues[2]; // for debugging purpose 
    odbc_close($conn); // closing the connection 
} 

假设输入列1,栏3 它必须生成所需的SQL是:

Select column1,sum(l1+week*column3)+ ........sum(l175+week*column3) from tempTable

我的JS代码如下如:

$.ajax({ 
     url: "logic/GetResultSet.php", 
     type: "post", 
     data:"query_To_Fire="+finQuery+"&action=get_Result", 
     success: function(data){ 
    $("#finaleQuery").append("<b>Generated Query:</b>"+data);} 

while调试我得到的输出为JS

select column1,sum(l1+week*column3)+...+sum(l76+week*column3)+LCLT_F3)1)����ȏ���ȏ 11 and so on 

怪异的人物还包括一些文字后其具有各种细节,如我的Ajax调用的参数,我的密码等。

不会有一个问题,如果我的输入是列1,列2是COS,就不会有上COLUMN2

这已被窃听我长期以来的任何总和。任何想法这种行为。

注意:我正在使用sublime文本,所以没有选择调试实际的PHP代码。

+0

你是意识到可以由用户和t修改JS代码通过发送任何修改后的查询,您会给用户在服务器上使用SQL注入的可能性吗?您应该生成一个逻辑筛选器并转义/验证用户输入,请仅生成服务器端查询。 – Steini 2014-10-30 11:25:35

+0

谢谢@Steini,我没有完全意识到SQL注入。仍然我指定的JS代码仅用于测试目的。我将在服务器端构建查询。 但现在我更关心输出中的不需要的字符和一些丢失的输出! – thinkinbee 2014-10-30 11:32:47

回答

0

我终于明白了这个问题。

对于处理LONG字段,PHP的默认设置为“4096”字节。如前所述here

重写设置为我的作品:ini_set("odbc.defaultlrl", "10K");

php.ini可以被修改,以支持项目的具体设置:

odbc.defaultlrl=4096 //default in php.ini 

有用的注意事项

; Handling of LONG fields. Returns number of bytes to variables. 0 means 
; passthru. 
odbc.defaultlrl=0 //to get as many characters as the long text contains.