用MySQLI写入数据库

时间:2016-01-24 21:02:22

标签: php mysql mysqli

我正在为我的好友做一个项目,我们想在mysqli中编写数据库调用。我是新手,我只使用了mysql命令,我知道这些命令已经过时了。我一直得到def top_right(size): line = '' nsize = size // 2 + 1 out = [""] line = "" for num in range(nsize): line = str(num+1) + line out.append(line) return out def top_left(size): line = '' nsize = size // 2 out = [] line = "" for num in range(nsize): line += str(num+1) out.append((nsize-len(line))*' ' + line) return out def full_diamond(size): tl, tr = top_left(size), top_right(size) for left, right in zip(tl, tr): print(left+right) full_diamond(17) 这是我的Call to a member function query() on a non-object on line 30命令。有谁能请我指出正确的方向吗?我试过在W3学校试一试。这是我的整个代码:

if ($mysqli->query($sql)) {

谢谢!

2 个答案:

答案 0 :(得分:4)

这是您的价值中的非对象$_POST[user_image],您在其他地方使用$_FILES["user_image"],但在您为代码发布的内容中没有任何输入。我们在这里处理文件而不是文本输入。

即:<input type="file" name="user_image">

  • 只有才知道。

另外,您需要使用您真正使用的连接变量,如果它是$db$mysqli,并且您已成功连接到数据库,或者选择了正确的数据库和表。

  • 同样,只有才知道。

然后这个:

$image_title = addslashes($_REQUEST['user_image']);

您应该使用$_FILES而不是$_REQUEST,因为这意味着您可能在未示出的&#34;其他&#34;中使用GET方法。形式。

参考:

参考文献:

并使用适合您的连接的错误处理。请参阅下面的修改

另外,请确保您要上传的文件夹具有正确的权限才能写入。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

同样使用var_dump();,回显和查看HTML源是在调试过程中可以帮助您的其他工具。

附加说明:

如果您希望将该数据作为二进制数据上传到表格中,请确保您使用的是正确的类型。

如TINYBLOB,BLOB,MEDIUMBLOB和LONGBLOB。

另一个&#34;只有你知道&#34;

参考:

Matt在评论中指出:

并且$file="uploads/".$_FILES["user_image"];应更改为$file="uploads/".$_FILES["user_image"]['name'];

"uploads/" . $_FILES["user_image"]的实例更改为"uploads/".$_FILES["user_image"]['name']

参考move_uploaded_file()上的手册:

<强>密码。

我注意到您使用MD5作为密码散列函数。此功能不再被认为是安全的。

使用以下其中一项:

其他链接:

关于列长的重要说明:

如果您决定使用password_hash()或隐藏,请务必注意,如果您当前的密码列长度低于60,则需要将其更改为(或更高)。手册建议长度为255。

您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。

修改

看到你的另一个问题:

我注意到了PDO语法$row = $stmt->fetch(PDO::FETCH_ASSOC);以及与mysql_函数$image = mysql_query...混合的位置。

这告诉我你可能仍在混合使用MySQL API。如果您的连接是PDO,那么无法混合那些不同的API 。您必须使用相同的连接到查询。

请参阅Stack上的以下内容:

PDO mysql_ - 无效
带有mysqli_的PDO - 无效
mysql_的{​​{1}} - 无效

答案 1 :(得分:0)

您的代码应该全部面向对象或全部功能。您可以采用面向对象的方式:

$mysqli = new mysqli('dbhost', 'username', 'password', 'dbname');
// ...
$username = $mysqli->escape_string($username);
$password = $mysqli->escape_string($password);
// ...
$mysqli->query($sql);

或功能方式:

$mysqli = mysqli_connect('dbhost', 'username', 'password', 'dbname');
// ...
$username = mysqli_escape_string($mysqli, $username);
$password = mysqli_escape_string($mysqli, $password);
// ...
mysqli_query($mysqli, $sql);

请注意,从PHP 7开始,函数语法已被弃用(我认为,找不到确切的版本)。有关正确使用的信息,请参阅mysqli::_construct的文档。

同样,mysqli_escape_string() / $mysqli->escape_string()现在是
的别名 $mysqli->real_escape_string(),因此不再需要使用较长的表单,就像使用旧的mysql模块一样。

最后,确保您已在代码中实际实例化$mysqli变量。即使连接失败,也没有理由你应该得到那个特定的错误。