これを phpMyAdmin で確認したところ、1 つの結果が返されました。
SELECT id, name
FROM tbl_product_category
INNER JOIN tbl_product_cat_basket AS basket
ON id = basket.cat_id
WHERE basket.product_id = 2
LIMIT 0,1
次に、これを phpMyAdmin で確認したところ、COUNT = 1 が返されました。
SELECT COUNT(*)
FROM tbl_product_category
INNER JOIN tbl_product_cat_basket AS basket
ON id = basket.cat_id
WHERE basket.product_id = 2
LIMIT 0,1
$rows
これが空の文字列またはnullを返す理由がわかりません:
function getProductCategory($product_id) {
$sql = "SELECT id, name FROM tbl_product_category
INNER JOIN tbl_product_cat_basket AS basket
ON id = basket.cat_id
WHERE basket.product_id = ?
LIMIT 0,1;";
$data = array((int)$product_id);
$rows = dbRowsCount($sql, $data);
logErrors("getProductCategory(".$product_id.") returned rows: ".$rows);
if ($rows == 1) {
dbQuery($sql, $data);
return dbFetch();
} else {
return null;
}
}
このlogErrors
メソッドは、次の出力を提供します。
getProductCategory(1) 返された行:
getProductCategory(2) 返された行:
getProductCategory(3) 返された行:
getProductCategory(4) 返された行:
getProductCategory(5) 返された行:
null
そのため、メソッドから戻ります。
私のdbRowsCount(...)
メソッドは、SQL を変換してSELECT COUNT(*)
をdbQuery(...)
実行し、実際のクエリを実行します。dbRowsCount(...)
これまでのところ、他のクエリに対して常に正しい行が返されていたため、これは奇妙です。
とにかくここにあります:
function dbRowsCount($sql, $data) {
global $db, $query;
$regex = '/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i';
if (preg_match($regex, $sql, $output) > 0) {
$query = $db->prepare("SELECT COUNT(*) FROM {$output[1]}");
$query->setFetchMode(PDO::FETCH_NUM);
if ($data != null)
$query->execute($data);
else
$query->execute();
if (!$query) {
echo "Oops! There was an error: PDOStatement returned false.";
exit;
}
return $query->fetchColumn();
}
return false;
}
それで、何がうまくいかなかったのですか?
編集
これが私のプログラムからの出力です:[元のクエリ] [正規表現後のクエリ]
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(1) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(2) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(3) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(4) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(5) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(6) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(7) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(8) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(9) returned rows: 7
SELECT * FROM tbl_store_admin WHERE php_sesskey=?;
SELECT COUNT(*) FROM tbl_store_admin WHERE php_sesskey=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_product ORDER BY last_update ASC;
SELECT COUNT(*) FROM tbl_product ORDER BY last_update ASC;