Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
                        
                        4年前关闭。
                                                                                            
                
        
好吧,我这里确实有一个奇怪的问题。我正在尝试通过PHP选择行,但是由于某种原因,它只是无法获取行数据!在获取数字行或任何东西时没有任何问题。

注意:我通过C#WinForm发送参数,这可能是问题的原因(排序规则或其他原因)?

$stmt_GetSalt = $con->prepare("SELECT Salt,Status FROM Accounts WHERE Email=?");
$stmt_GetSalt->bind_param("s", $email);
$stmt_GetSalt->execute();
$stmt_GetSalt->bind_result($salt, $status);
$stmt_GetSalt->fetch();
$stmt_GetSalt->close();


状态是int,但返回值没有问题。 Salt是varchar,但没有数据返回。这里发生了什么?

编辑:表中数据的XML表示形式。

<table name="Accounts"> <column name="Email">test@testmail.test3</column> <column name="Password">65T6ANoLeSrBA</column> <column name="Salt">65fe93d93e283f002beaca712fd178c6</column> <column name="PIN">81dc9bdb52d04dc20036dbd8313ed055</column> <column name="Status">0</column> <column name="ID">5</column></table>

编辑2:解决了问题。绑定参数后,我正在实例化$email。因此,该语句试图绑定尚不存在的参数。我不应该在深夜编码。

最佳答案

我无法重现问题

<?php
mysqli_report(MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'localonly', 'localonly', 'test');
setup($mysqli);
var_export( foo($mysqli, 'test@testmail.test3') );

function foo($con, $email) {
    $stmt_GetSalt = $con->prepare("SELECT Salt,Status FROM soFoo WHERE Email=?");
    $stmt_GetSalt->bind_param("s", $email);
    $stmt_GetSalt->execute();
    $stmt_GetSalt->bind_result($salt, $status);
    $stmt_GetSalt->fetch();
    $stmt_GetSalt->close();
    return array('salt'=>$salt, 'status'=>$status);
}

function setup($mysqli) {
    $mysqli->query('
        CREATE TEMPORARY TABLE soFoo (
            Salt varchar(32),
            Status int,
            email varchar(32)
        )
    ');

    $mysqli->query("
        INSERT INTO soFoo (Salt,Status,email) VALUES
        ('65fe93d93e283f002beaca712fd178c6', 0, 'test@testmail.test3')
    ");
}


版画

array (
  'salt' => '65fe93d93e283f002beaca712fd178c6',
  'status' => 0,
)


如预期的那样。

关于c# - PHP准备的语句-无法选择Varchar行,选择数字行没有问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31353979/

10-14 13:03