对SQL server数据库的PHP查询(wordpress)
我试图通过PHP从woocommerce网站与MSSQL服务器数据库通信(获取产品、类别等数据)。但我没有得到任何结果,以下是我的代码:对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,
$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);
}