干查询,稍后在 php 中的 if 语句中添加 where 子句
Dry query, adding a where clause inside an if statement later on in php
我是一个干货代码爱好者。我不确定是否可行,但我正在努力避免编写双重查询。
这是我的例子:
$link = $_SERVER['PHP_SELF'];
$link_array = explode('/', $link);
$page = end($link_array);
在我的代码的第一部分,我正在解析我的 link。
if (strpos($link, 'something') !== false) {
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_id = '$page'");
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
} else {
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_hash = '$page'");
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
}
然后我 运行 两个查询:取决于我正在解析的 link 我将检索两组不同的数据。
我想知道是否可以采用不同的方法,在这一行中:
$sql = $ee->db->query("SELECT * FROM `mytable`");
在我的变量之后,然后在 if 语句中:
if (strpos($link, 'something') !== false) {
$sql =. $ee->db->query("WHERE order_id = '$page'");
#code
} else {
$sql =. $ee->db->query("WHERE order_hash = '$page'");
#code
}
或者任何其他避免重写我的代码的方法都可以。在这种情况下,我不会节省很多,我只是想了解什么是最好的方法。
您可以只修改开头:
这里使用三元运算符(基本上是单行 if 语句)
$sql = ( (strpos($link,'something') !== false) ? $ee->db->query("SELECT * FROM `mytable` WHERE order_id = '$page'") : $ee->db->query("SELECT * FROM `mytable` WHERE order_hash = '$page'") );
如果你不喜欢那种风格,你可以这样做:
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE ");
if( strpos($link,'something') !== false ) {
$sql .= "order_id = '$page'"
}else{
} $sql .= "order_hash = '$page'";
然后一旦设置了 $sql,您现在就可以 运行 foreach 一次,因为两种方式都是相同的代码
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
使用 DRY 进行查询(尤其是您示例中的 on 之类的简单查询)通常不是一个好主意。它会造成混乱并使您的代码可读性降低且更难维护。我不推荐它,但如果你真的想这样做,只需为 SQL 语句使用一个字符串变量:
$sql = "SELECT * FROM `mytable`";
if (strpos($link, 'something') !== false) {
$sql =. "WHERE order_id = '$page'";
} else {
$sql =. "WHERE order_hash = '$page'";
}
$query = $ee->db->query($sql);
还要确保使用准备语句来防止 SQL 注入。
忽略注入的 $page
变量问题,您实际上只需要替换它看起来像的列名:
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_".((strpos($link, 'something') !== false)? "id" : "hash")." = '$page'");
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
}
我是一个干货代码爱好者。我不确定是否可行,但我正在努力避免编写双重查询。
这是我的例子:
$link = $_SERVER['PHP_SELF'];
$link_array = explode('/', $link);
$page = end($link_array);
在我的代码的第一部分,我正在解析我的 link。
if (strpos($link, 'something') !== false) {
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_id = '$page'");
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
} else {
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_hash = '$page'");
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
}
然后我 运行 两个查询:取决于我正在解析的 link 我将检索两组不同的数据。
我想知道是否可以采用不同的方法,在这一行中:
$sql = $ee->db->query("SELECT * FROM `mytable`");
在我的变量之后,然后在 if 语句中:
if (strpos($link, 'something') !== false) {
$sql =. $ee->db->query("WHERE order_id = '$page'");
#code
} else {
$sql =. $ee->db->query("WHERE order_hash = '$page'");
#code
}
或者任何其他避免重写我的代码的方法都可以。在这种情况下,我不会节省很多,我只是想了解什么是最好的方法。
您可以只修改开头:
这里使用三元运算符(基本上是单行 if 语句)
$sql = ( (strpos($link,'something') !== false) ? $ee->db->query("SELECT * FROM `mytable` WHERE order_id = '$page'") : $ee->db->query("SELECT * FROM `mytable` WHERE order_hash = '$page'") );
如果你不喜欢那种风格,你可以这样做:
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE ");
if( strpos($link,'something') !== false ) {
$sql .= "order_id = '$page'"
}else{
} $sql .= "order_hash = '$page'";
然后一旦设置了 $sql,您现在就可以 运行 foreach 一次,因为两种方式都是相同的代码
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
使用 DRY 进行查询(尤其是您示例中的 on 之类的简单查询)通常不是一个好主意。它会造成混乱并使您的代码可读性降低且更难维护。我不推荐它,但如果你真的想这样做,只需为 SQL 语句使用一个字符串变量:
$sql = "SELECT * FROM `mytable`";
if (strpos($link, 'something') !== false) {
$sql =. "WHERE order_id = '$page'";
} else {
$sql =. "WHERE order_hash = '$page'";
}
$query = $ee->db->query($sql);
还要确保使用准备语句来防止 SQL 注入。
忽略注入的 $page
变量问题,您实际上只需要替换它看起来像的列名:
$sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_".((strpos($link, 'something') !== false)? "id" : "hash")." = '$page'");
foreach ($sql->result() as $row) {
$tracking_code = $row->tracking_id;
$carrier_name = $row->carrier_name;
echo "The real carrier name is: {$carrier_name} .<br>";
echo "The real tracking code is: " . $tracking_code . ' .<br>';
}