我见过很多人声称你应该在选择查询中专门命名你想要的每一列.
假设我要使用所有列,为什么我不使用SELECT *?
即使考虑问题*SQL查询 - 从视图中选择*或从视图*选择col1,col2,... colN,我不认为这是完全重复的,因为我从一个略微不同的角度来看待问题.
我们的原则之一是不要在它之前进行优化.考虑到这一点,似乎使用SELECT *应该是首选方法,直到它被证明是一个资源问题或模式几乎是一成不变的.据我们所知,在开发完成之前不会发生这种情况.
那就是说,不使用是否有一个压倒一切的问题SELECT *?
为什么使用'*'构建视图不好?
假设您有一个复杂的连接,并且可以在某处使用所有字段.
然后你只需要选择所需的字段.
SELECT field1, field2 FROM aview WHERE ...
Run Code Online (Sandbox Code Playgroud)
视图"aview"可能是 SELECT table1.*, table2.* ... FROM table1 INNER JOIN table2 ...
如果table1和table2中的2个字段具有相同的名称,则会出现问题.
这只是为什么在视图中使用'*'不好的原因?
使用'*',您可以在不同的上下文中使用该视图,因为信息就在那里.
我错过了什么?
问候
可能重复:
哪个更快/最好?SELECT*或SELECT column1,colum2,column3等
不使用select*的原因是什么?
使用SELECT*而不是SELECT FiledName,FiledName2 ......是否存在性能问题?
我正在使用mysqli prepare语句来查询具有多个约束的数据库.我在我的测试文件中运行了代码,它运行得很好.但是,当我将代码移动到我的实时文件时,它会抛出以下错误:
PHP警告:mysqli_stmt :: bind_result():绑定变量数与第80行C:\ wamp\www\firecom\firecom.php中预准备语句中的字段数不匹配
PHP注意:未定义的变量:在第89行产生C:\ wamp\www\firecom\firecom.php
两个参数都正确设置,但有些东西正在抛弃它.
码:
$query = $mysqli->prepare("SELECT * FROM calls WHERE wcccanumber = ? && county = ?");
$query->bind_param("ss", $wcccanumber, $county);
$query->execute();
$meta = $query->result_metadata();
while ($field = $meta->fetch_field()) {
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($query, 'bind_result'), $parameters);
while ($query->fetch()) {
foreach($row as $key => $val) {
$x[$key] = $val;
}
$results[] = $x;
}
print_r($results['0']);
Run Code Online (Sandbox Code Playgroud)
$ query var_dump:
object(mysqli_stmt)#27 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(2) ["field_count"]=> int(13) ["errno"]=> int(0) ["error"]=> …Run Code Online (Sandbox Code Playgroud) 我不能让这个工作.我现在已经花了很多时间.
这有效:
$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno)
{
return;
}
$query_str= "SELECT name FROM table WHERE city IN ('Nashville','Knoxville')";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{
$query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)
但是我不能让它与这样的bind_param一起工作:
$query_str= "SELECT name FROM table WHERE city IN (?)";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{
$cities= explode(",", $_GET['cities']);
$str_get_cities= "'".implode("','", $get_cities)."'"; // This equals 'Nashville','Knoxville'
$query_prepared->bind_param("s", $cities);
$query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我也试过call_user_func_array,但似乎无法使语法正确.任何帮助将不胜感激!
编辑:我已经严格尝试了moskito-x的建议和大量的例子列在这里以及其他在SO和随机网站上,没有任何作品.我认为问题可能是PHP 5.4,这就是我的MAMP现在设置的.