尝试以下操作:
$order_id = 012345;
$sql = $wpdb->prepare("SELECT payStatus FROM test_table WHERE ref = %s",$order_id);//<-- this doesn\'t work
var_dump($sql);
echo \'<br/>\';
$sql = $wpdb->prepare("SELECT payStatus FROM test_table WHERE ref = %d",$order_id);//<-- this doesn\'t work
var_dump($sql);
echo \'<br/>\';
$sql = $wpdb->prepare("SELECT payStatus FROM test_table WHERE ref = %f",$order_id);//<-- this doesn\'t work
var_dump($sql);
echo \'<br/>\';
$sql = $wpdb->prepare("SELECT payStatus FROM test_table WHERE ref = %s",(string)$order_id);//<-- this doesn\'t work
var_dump($sql);
echo \'<br/>\';
$order_id = \'012345\';
$sql = $wpdb->prepare("SELECT payStatus FROM test_table WHERE ref = %s",$order_id);//<-- this doesn\'t work
var_dump($sql);
echo \'<br/>\';
您会注意到,除了最后一个转换为
5349
.
This is because a leading zero in PHP indicates an octal number. 确切地说,你的零号没有被剥夺。它正在转换为十进制。
实际上,您传递的是一个八进制数,或者您在某处将一个前导为零的字符串转换为整数。我不能确切地说出发生在哪里,但你需要防止它。
真的不是prepare
就是这样。它更像PHP核心。