"Execute Array" 数据库问题 PHP
"Execute Array" problem from Database PHP
作为初学者,我在从数据库执行数组时遇到了问题。
我的代码:
$operation_id = (int)$_GET["operation"];
$operation_query = $db_link->prepare('SELECT * FROM `shop_users_accounting` WHERE `id` = ? AND `active` = 0 AND `user_id` = ?;');
$operation_query->execute( array($operation_id, $user_id) );
$operation = $operation_query->fetch();
if($operation == false)
{
$answer = array();
$answer["result"] = false;
$answer["code"] = 2;
exit(json_encode($answer));
}
目前,我可以回显 $operation_id
和 $user_id
没有任何问题
但在 shop_users_accounting
table 中我有更多列,例如 pay_orders
和 amount
我试过这样做 $operation_query->execute( array($operation_id, $user_id, $pay_orders) );
但是 IF 函数执行后我得到 false
我已经试过了$operation_query = $db_link->prepare('SELECT * FROM `shop_users_accounting` WHERE `id` = ? AND `active` = 0 AND `user_id` = ? AND `pay_orders` = ?;');
,结果是一样的,如果函数被执行,我得到 false
问题是,我做错了什么,以及如何从数据库中获取 pay_orders
和 amount
而不会获取 False
自己解决
谢谢
首先,我将定义连接,将请求添加到 return 来自 mysql 的错误:
$pdo = new PDO('mysql:host=127.0.0.1;dbname=mydbname', $db_user, $db_pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
你看到最后一个 array() 了吗?它告诉 mysql 到 return 错误。
然后我将所有内容都放在 try catch 块中,以便我可以处理错误:
try{
$operation_query = $db_link->prepare('SELECT * FROM `shop_users_accounting` WHERE `id` = ? AND `active` = 0 AND `user_id` = ?;');
$operation_query->execute( array($operation_id, $user_id) );
$operation = $operation_query->fetch();
}
catch (PDOException $e) {
echo $e->getMessage();
}
因此 try 块将始终执行。只有在出现错误时才会执行 catch 并且只会回显错误消息。如果查询失败,您要做的是将您的逻辑放在 catch 块中,如果您的查询成功,则将您的逻辑放在 catch 块之后。
您遇到的错误在您的代码中并不明显,但可能是由于您向查询传递的值不正确(数组元素的值)。用于将数组传递给查询(所谓的执行数组)的语法没有严格错误。
我还建议在查询中使用命名参数,并使用 bindParams() 来获得包含许多参数的更易读的代码。有关如何构建准备好的语句的更多详细信息,请参阅 here。
作为初学者,我在从数据库执行数组时遇到了问题。
我的代码:
$operation_id = (int)$_GET["operation"];
$operation_query = $db_link->prepare('SELECT * FROM `shop_users_accounting` WHERE `id` = ? AND `active` = 0 AND `user_id` = ?;');
$operation_query->execute( array($operation_id, $user_id) );
$operation = $operation_query->fetch();
if($operation == false)
{
$answer = array();
$answer["result"] = false;
$answer["code"] = 2;
exit(json_encode($answer));
}
目前,我可以回显 $operation_id
和 $user_id
没有任何问题
但在 shop_users_accounting
table 中我有更多列,例如 pay_orders
和 amount
我试过这样做 $operation_query->execute( array($operation_id, $user_id, $pay_orders) );
但是 IF 函数执行后我得到 false
我已经试过了$operation_query = $db_link->prepare('SELECT * FROM `shop_users_accounting` WHERE `id` = ? AND `active` = 0 AND `user_id` = ? AND `pay_orders` = ?;');
,结果是一样的,如果函数被执行,我得到 false
问题是,我做错了什么,以及如何从数据库中获取 pay_orders
和 amount
而不会获取 False
自己解决
谢谢
首先,我将定义连接,将请求添加到 return 来自 mysql 的错误:
$pdo = new PDO('mysql:host=127.0.0.1;dbname=mydbname', $db_user, $db_pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
你看到最后一个 array() 了吗?它告诉 mysql 到 return 错误。 然后我将所有内容都放在 try catch 块中,以便我可以处理错误:
try{
$operation_query = $db_link->prepare('SELECT * FROM `shop_users_accounting` WHERE `id` = ? AND `active` = 0 AND `user_id` = ?;');
$operation_query->execute( array($operation_id, $user_id) );
$operation = $operation_query->fetch();
}
catch (PDOException $e) {
echo $e->getMessage();
}
因此 try 块将始终执行。只有在出现错误时才会执行 catch 并且只会回显错误消息。如果查询失败,您要做的是将您的逻辑放在 catch 块中,如果您的查询成功,则将您的逻辑放在 catch 块之后。
您遇到的错误在您的代码中并不明显,但可能是由于您向查询传递的值不正确(数组元素的值)。用于将数组传递给查询(所谓的执行数组)的语法没有严格错误。 我还建议在查询中使用命名参数,并使用 bindParams() 来获得包含许多参数的更易读的代码。有关如何构建准备好的语句的更多详细信息,请参阅 here。