【问题标题】:PHP query to SQL server database (wordpress)PHP 查询 SQL 服务器数据库(wordpress)
【发布时间】:2021-07-27 05:25:36
【问题描述】:

我正在尝试从 woocommerce 网站使用 PHP 与 MSSQL Server 数据库进行通信(以获取产品、类别等数据)。但我没有得到任何结果,这是我的代码:

$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); 

使用此代码它不会打印任何内容。但是,如果我取消注释while 上面的行,那么我会得到一些结果,但我没有得到所有结果(数据库中有大约 2000 个项目,但我得到了大约 10 个项目而没有第一个项目 - 这很明显,因为我已经消费了第一行)。获得所有结果的正确方法是什么?

【问题讨论】:

  • 代码看起来不错(本质上,它与 PHP 文档中的示例匹配)。您是否尝试在 while 循环内或 while 循环后打印出错误 - sqlsrv_errors(),以查看是否确实发生了某种错误?另外,如果你只是在 while 循环中打印一个静态字符串,你会得到结果吗? (即,即使您看到“无结果”,您能否确认 while 循环是否实际发生?)
  • @Craig 如果我删除了注释行,那么它似乎没有进入 while - 它不会打印静态单词。 sqlsrv_errors() 也没有打印错误
  • 这可能是超时,因为您正在从远程服务器获取 dqata。
  • 这是您的网站运行的同一个数据库吗?还是换一个?
  • @Mr.Jo 不一样的

标签: php sql sql-server wordpress woocommerce


【解决方案1】:

这会儿好像出了点问题。

这段时间还可以,但似乎在他不得不结束之前就结束了。

我正在寻找一些解决方案,这个人也遇到了同样的问题:

SQLSRV doesn't fetch all rows

首先得到结果的数量:

$result_num = sqlsrv_num_rows( $result_count_res ); 

然后使用 for 而不是 while

for($i = 0; $i < $result_num; $i++){
            $data[] = sqlsrv_fetch_array( $result_res, SQLSRV_FETCH_ASSOC);
        }

另外考虑一下,超时。因为你正在攻击另一台服务器...

【讨论】:

  • 它看起来像它的工作。问题是这不是我猜的正确方法。但只要它有效....
【解决方案2】:

试试这个方法:

$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>';
}

【讨论】:

  • 我必须与外部 SQL Server 数据库通信,WP_Query 没有帮助
  • 同样的事情...我必须使用 2 个 sqlsrv_fetch_array
【解决方案3】:

如果我是你,我会使用我已经拥有的工具 - 如果是 WordPress,它是 wpdb。通常,当您使用 wpdb 时,您是从 WordPress 数据库中获取数据,但在我们的例子中,我们会在使用其方法之前连接到不同的数据库:

$conn = new wpdb( $uid, $pwd, $databaseName, $serverName );

$results = $conn->get_results( 'SELECT * FROM eshopItemsTable' );

这也处理超时的东西 - 通常。通过注销结果来尝试并告诉我它是否有效。如果是,我认为您可以继续处理此问题。

【讨论】:

  • 问题是外部数据库是 MSSQL 而不是 mysql 所以我认为我不能使用wpdb
  • 你试过了吗?请在您的问题中添加这是一个新要求...
  • @Mr.Jo,它已经存在了:我正在尝试从 woocommerce 网站使用 PHP 与 SQL Server 数据库通信...
  • 所以你已经尝试过了,但它不起作用 - 对吧?
  • 如果您尝试过但它不起作用,我会在您的 WordPress 数据库表上创建一个表 eshopItemsTable。在此之后,我将在您的 MSSQL 表上配置一个每天与该表同步的数据库作业。这样您就可以更快地获得结果。
【解决方案4】:

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

$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); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多