对SQL server数据库的PHP查询(wordpress)

对SQL server数据库的PHP查询(wordpress),php,sql,sql-server,wordpress,woocommerce,Php,Sql,Sql Server,Wordpress,Woocommerce,我试图通过PHP从woocommerce网站与MSSQL服务器数据库通信(获取产品、类别等数据)。但我没有得到任何结果,以下是我的代码: $connectionInfo = array( "UID"=>$uid, "PWD"=>$pwd,

我试图通过PHP从woocommerce网站与MSSQL服务器数据库通信(获取产品、类别等数据)。但我没有得到任何结果,以下是我的代码:

$connectionInfo = array( "UID"=>$uid,                            
                             "PWD"=>$pwd,                            
                             "Database"=>$databaseName); 
$conn = sqlsrv_connect( $serverName, $connectionInfo);  

$tsql = "SELECT * FROM eshopItemsTable";

$stmt = sqlsrv_query($conn, $tsql);
//uncomment to get some results : $table = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
while( $table = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) { 
    print_r($table);
        
}
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn); 
用这段代码它什么也不打印。但是如果我在期间取消注释上面的
行,那么我会得到一些结果,但不会得到所有结果(数据库中有大约2000个项目,但我会得到大约10个没有第一个项目的项目,这很明显,因为我已经使用了第一行)。获得所有结果的正确方法是什么?

尝试以下方法:

$stmt = sqlsrv_query($conn, $tsql);
sqlsrv_execute($stmt);

if ($stmt !== false) {
    while ($table = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
        print_r($table);
    }
} else {
    echo '<pre>';
    print_r(sqlsrv_errors());
    echo '</pre>';
}
$stmt=sqlsrv\u查询($conn,$tsql);
sqlsrv_执行($stmt);
如果($stmt!==false){
而($table=sqlsrv\u fetch\u数组($stmt,sqlsrv\u fetch\u ASSOC)){
打印(表格);
}
}否则{
回声';
打印(sqlsrv_errors());
回声';
}

如果我是你,我会使用我已经拥有的工具——如果是WordPress,它就是
wpdb
。通常,当您使用
wpdb
时,您是从WordPress数据库中获取数据的,但在本例中,我们先连接到另一个数据库,然后再使用其方法:

$serverName = "(local)";
$uid = "Enter Username";
$pwd = "Enter Password for SQL User";
$databaseName = "Enter name of the Database";
$connectionInfo = array( "UID"=>$uid,
                         "PWD"=>$pwd,
                         "Database"=>$databaseName);

$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )  
{  
     echo "Could not connect.\n";  
     die( print_r( sqlsrv_errors(), true));  
}   

$tsql = "SELECT * FROM eshopItemsTable";
$stmt = sqlsrv_query($conn, $tsql);
if( $stmt === false)  
{  
     echo "Error in query preparation/execution.\n";  
     die( print_r( sqlsrv_errors(), true));  
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))  
{  
      echo $row['ItemsName'].", ".$row['ItemsPrice']."\n";  
}
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn); 

这也处理了超时的事情-正常情况下。通过注销结果来尝试,并告诉我它是否有效。如果是,我认为您可以继续使用此代码。

请检查此代码,您可以逐步打印错误

$result_num = sqlsrv_num_rows( $result_count_res ); 

这段时间似乎有些问题。

这段时间还行,但似乎在他不得不离开之前就结束了

我一直在寻找一些解决方案,这个人也有同样的问题:

首先,获取结果的数量:

for($i = 0; $i < $result_num; $i++){
            $data[] = sqlsrv_fetch_array( $result_res, SQLSRV_FETCH_ASSOC);
        }
然后使用for而不是while

($i=0;$i<$result\u num;$i++)的
{
$data[]=sqlsrv_fetch_数组($result_res,sqlsrv_fetch_ASSOC);
}

还可以考虑暂停。因为您正在攻击另一台服务器…

代码看起来正常(本质上,它与PHP文档中的示例相匹配)。您是否尝试过在while循环内部或while循环之后打印错误-sqlsrv_errors(),以查看是否确实发生了某种错误?另外,如果您只是在while循环中打印一个静态字符串,您会得到一个结果吗?(即,你能确认while循环是否真的发生了,即使你看到“没有结果”?)@Craig如果我删除了注释行,那么它似乎没有进入while-它不会打印静态单词。另外,使用sqlsrv_errors()打印时没有错误。这可能是一个超时,因为您正在从远程服务器获取dqata。这是您的网站运行的同一个数据库吗?还是另一个?@Mr.Jo另一个我必须与外部SQL Server数据库通信,WP_查询不需要help@netdev我更新了我的答案同样的事情。。。我必须使用2个sqlsrv_fetch_array问题是外部数据库是MSSQL而不是mysql,所以我认为我不能使用
wpdb
你试过了吗?请在您的问题中添加这一新要求。…。@Mr.Jo,它已经存在了:我正在尝试从woocommerce网站用PHP与SQL Server数据库通信…所以您已经尝试过了,但它不起作用-对吗?如果您尝试过,但它不起作用,我会在您的WordPress数据库表上创建一个表
eshopItemsTable
。在此之后,我将在MSSQL表上配置一个数据库作业,它每天都与该表同步。这样你就有了一个更快的方法来获得结果。它看起来很有效。问题是我想这不是正确的方法。但只要它起作用。。。。
for($i = 0; $i < $result_num; $i++){
            $data[] = sqlsrv_fetch_array( $result_res, SQLSRV_FETCH_ASSOC);
        }