相关疑难解决方法(0)

不使用select*的原因是什么?

我见过很多人声称你应该在选择查询中专门命名你想要的每一列.

假设我要使用所有列,为什么我不使用SELECT *

即使考虑问题*SQL查询 - 从视图中选择*或从视图*选择col1,col2,... colN,我不认为这是完全重复的,因为我从一个略微不同的角度来看待问题.

我们的原则之一是不要在它之前进行优化.考虑到这一点,似乎使用SELECT *应该是首选方法,直到它被证明是一个资源问题或模式几乎是一成不变的.据我们所知,在开发完成之前不会发生这种情况.

那就是说,不使用是否有一个压倒一切的问题SELECT *

sql

135
推荐指数
6
解决办法
2万
查看次数

为什么使用'*'构建视图不好?

为什么使用'*'构建视图不好?

假设您有一个复杂的连接,并且可以在某处使用所有字段.

然后你只需要选择所需的字段.

SELECT field1, field2 FROM aview WHERE ...
Run Code Online (Sandbox Code Playgroud)

视图"aview"可能是 SELECT table1.*, table2.* ... FROM table1 INNER JOIN table2 ...

如果table1和table2中的2个字段具有相同的名称,则会出现问题.

这只是为什么在视图中使用'*'不好的原因?

使用'*',您可以在不同的上下文中使用该视图,因为信息就在那里.

我错过了什么?

问候

sql view

22
推荐指数
5
解决办法
7266
查看次数

6
推荐指数
4
解决办法
8218
查看次数

PHP mysqli准备语句不起作用

我正在使用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)

php sql mysqli prepared-statement

6
推荐指数
1
解决办法
2050
查看次数

mysqli bind_param用于字符串数组

我不能让这个工作.我现在已经花了很多时间.

这有效:

$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现在设置的.

php mysqli bindparam

6
推荐指数
3
解决办法
3万
查看次数

标签 统计

sql ×4

mysqli ×2

php ×2

bindparam ×1

database ×1

performance ×1

prepared-statement ×1

view ×1