in-select中使用varbinary时出现php-mysql错误

bwitn5fc  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(196)

我有唯一的16字节键,我需要通过它们来获取记录id。这是我的示例表:

CREATE TABLE `prob` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`key` VARBINARY(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;
INSERT INTO `prob` ( `key` ) VALUES ( 0x1234 );

我成功录制:

$key = pack( "H*", '01020304' );
if( $stmt = $con->prepare("INSERT INTO prob VALUES ( DEFAULT, ? )") ) {
    $stmt->bind_param( "s", $key );
    $stmt->execute( );
    $stmt->close( );
} else { $err = $con->error; echo "Err $err<br>"; }

这是代码,我在找相同密钥的id:

if( $stmt = $con->prepare("SELECT id FROM prob WHERE key='?'") ) {
    if( !$stmt->bind_param( "s", $key ) ) {echo 'Err bind_param.<br>'; die( );}
    if( !$stmt->execute( ) ) {echo 'Err execute.<br>'; die( );}
    if( !$stmt->bind_result( $id ) ) {echo 'Err bind_result.<br>'; die( );}
    $rv = $stmt->fetch( );
    $stmt->close( );
    echo 'Result: '.print_r( $rv ).'<br>';
} else { $err = $con->error; echo "Err $err<br>"; }

我得到了这个错误:
你的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以便在第1行的“key=”附近使用正确的语法
我找不到解决办法。
我也尝试过这个代码,但又出现了同样的错误:

if($result = $con->query( "SELECT id FROM prob WHERE key=$key" )) {
    if( $count = $result->num_rows == 1 ) {
        $row = $result->fetch_row( );
        $rv = $row[0];
        $result->close( );
    }
} else { $err = $con->error; echo "Err $err<br>"; }

我还尝试了0x1234,'0x1234',('0x1234'),…,no,no和no,相同的错误。。。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题