PHP SQL 语句不起作用但直接从 phpmyadmin 起作用
PHP SQL statement doesn't work but works directly from phpmyadmin
我已经看到很多关于此的问题,但是我还没有找到适合我的答案。我有一个 PHP 用户输入票号,信息将存储在一个数据库中,但是我想检查另一个数据库和 table 以检查该号码是否在 table.输入是一个字符串,我试过 intval($ticket) 还是不行。
$ticketQry = mysqli_prepare($con,"select count(*) from <database2>.mantis_bug_table where id =?");
mysqli_stmt_bind_param($ticketQry,'i',intval($Ticket));
mysqli_execute($ticketQry);
var_dump($ticketQry);
Result:
object(mysqli_stmt)#7 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(1) ["field_count"]=> int(1) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(6) }
我发现 affected_rows int(-1) 表示查询有问题,但我终究无法弄清楚。
我尝试添加一个 mysqli_select_db() 语句以在两个数据库之间切换,是的,我在执行此操作时从 SQL 语句中删除了,但这没有用。
现在,如果我进入 phpmyadmin 并输入相同的参数和 sql 语句,它就可以正常工作。我确实也尝试过将它绑定为一个字符串。
如果我 运行 在 phpmyadmin 中这样做,结果是 1。所以我再次知道这是在 phpmyadmin 中工作,但不是我的 PHP 脚本。
您需要调用 mysqli_stmt_store_result()
来缓冲准备语句的结果。
php > $db = new mysqli('localhost', 'username', 'password', 'dbname');
php > $stmt = $db->prepare("SELECT COUNT(*) from t_users where username = ?");
php > $username = 'barmar';
php > $stmt->bind_param("s", $username);
php > $stmt->execute();
php > var_dump($stmt);
object(mysqli_stmt)#1 (10) {
["affected_rows"]=> // affected_rows is initially -1
int(-1)
["insert_id"]=>
int(0)
["num_rows"]=> // num_rows is initially 0
int(0)
["param_count"]=>
int(1)
["field_count"]=>
int(1)
["errno"]=>
int(0)
["error"]=>
string(0) ""
["error_list"]=>
array(0) {
}
["sqlstate"]=>
string(5) "00000"
["id"]=>
int(1)
}
php > $stmt->store_result();
php > var_dump($stmt);
object(mysqli_stmt)#1 (10) {
["affected_rows"]=> // affected_rows is now 1
int(1)
["insert_id"]=>
int(0)
["num_rows"]=> // num_rows is now 1
int(1)
["param_count"]=>
int(1)
["field_count"]=>
int(1)
["errno"]=>
int(0)
["error"]=>
string(0) ""
["error_list"]=>
array(0) {
}
["sqlstate"]=>
string(5) "00000"
["id"]=>
int(1)
}
我已经看到很多关于此的问题,但是我还没有找到适合我的答案。我有一个 PHP 用户输入票号,信息将存储在一个数据库中,但是我想检查另一个数据库和 table 以检查该号码是否在 table.输入是一个字符串,我试过 intval($ticket) 还是不行。
$ticketQry = mysqli_prepare($con,"select count(*) from <database2>.mantis_bug_table where id =?");
mysqli_stmt_bind_param($ticketQry,'i',intval($Ticket));
mysqli_execute($ticketQry);
var_dump($ticketQry);
Result:
object(mysqli_stmt)#7 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(1) ["field_count"]=> int(1) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(6) }
我发现 affected_rows int(-1) 表示查询有问题,但我终究无法弄清楚。
我尝试添加一个 mysqli_select_db() 语句以在两个数据库之间切换,是的,我在执行此操作时从 SQL 语句中删除了,但这没有用。
现在,如果我进入 phpmyadmin 并输入相同的参数和 sql 语句,它就可以正常工作。我确实也尝试过将它绑定为一个字符串。
如果我 运行 在 phpmyadmin 中这样做,结果是 1。所以我再次知道这是在 phpmyadmin 中工作,但不是我的 PHP 脚本。
您需要调用 mysqli_stmt_store_result()
来缓冲准备语句的结果。
php > $db = new mysqli('localhost', 'username', 'password', 'dbname');
php > $stmt = $db->prepare("SELECT COUNT(*) from t_users where username = ?");
php > $username = 'barmar';
php > $stmt->bind_param("s", $username);
php > $stmt->execute();
php > var_dump($stmt);
object(mysqli_stmt)#1 (10) {
["affected_rows"]=> // affected_rows is initially -1
int(-1)
["insert_id"]=>
int(0)
["num_rows"]=> // num_rows is initially 0
int(0)
["param_count"]=>
int(1)
["field_count"]=>
int(1)
["errno"]=>
int(0)
["error"]=>
string(0) ""
["error_list"]=>
array(0) {
}
["sqlstate"]=>
string(5) "00000"
["id"]=>
int(1)
}
php > $stmt->store_result();
php > var_dump($stmt);
object(mysqli_stmt)#1 (10) {
["affected_rows"]=> // affected_rows is now 1
int(1)
["insert_id"]=>
int(0)
["num_rows"]=> // num_rows is now 1
int(1)
["param_count"]=>
int(1)
["field_count"]=>
int(1)
["errno"]=>
int(0)
["error"]=>
string(0) ""
["error_list"]=>
array(0) {
}
["sqlstate"]=>
string(5) "00000"
["id"]=>
int(1)
}