无法在PHP中创建表
它会给出此错误消息“调用非对象上的成员函数bind_param()”例如,您只需添加一个名为“to”的字段,就可以在其中写入接收方名称,而不是为每个用户创建新表。这是个坏习惯 使新领域像无法在PHP中创建表,php,Php,它会给出此错误消息“调用非对象上的成员函数bind_param()”例如,您只需添加一个名为“to”的字段,就可以在其中写入接收方名称,而不是为每个用户创建新表。这是个坏习惯 使新领域像 $table_name=strval($new_username).'_msgs'; @ $db=new mysqli('localhost','root','','newdatabase'); $query2="CREATE TABLE ? ( 'msg_id' int(20) auto_incremen
$table_name=strval($new_username).'_msgs';
@ $db=new mysqli('localhost','root','','newdatabase');
$query2="CREATE TABLE ? ( 'msg_id' int(20) auto_increment primary key,'sender' varchar(50), 'content' varchar(2000), 'date' varchar(50) )";
$stmt2=$db->prepare($query2);
$stmt2->bind_param("s",$table_name);
$stmt2->execute();
您可以通过如下查询获取他的消息:
`receiver` varchar(50)
您的错误表明
$stmt
无效
这是因为由于错误的语法和占位符的无效使用,您的查询没有准备好
删除create table中列名周围的引号
SELECT * FROM `msgs` WHERE `receiver`='random_username'
如果语句已准备好或未使用,则始终可以调试该语句
$query2="CREATE TABLE ? ( `msg_id` int(20) auto_increment primary key,
`sender` varchar(50),
`content` varchar(2000),
`date` varchar(50)
)";
你可以知道这个错误
请参见教程
这只是你告诉你的调试技巧。。实际上,不能对表名和标识符使用占位符。
看
正如@Deepsy所建议的。。我也同意这是不好的做法。。这将在数据库中创建大量的表,而这些表只能由一个表完成
$stmt2=$db->prepare($query2) or die($db->error);
从第二行删除@,看看连接是否良好。另一方面,在代码中使用@不是一个好主意。为什么要从动态创建新表开始?!?!第一,这个问题在很多层面上都有很多错误;但是,您越想解决手头的问题:标识符没有占位符,只有数据!不能保存表名。这会给你一些关于最佳实践的线索。可能是为什么要投票,请考虑添加评论……但是仍然错过了滥用占位符的最大问题。@ DeeSee谢谢指点。学到了一件新东西:)。我不介意投否决票,但我应该知道原因,这样我可以自己更正。当用户数量大幅增加时,是否会进行长时间加载的查询???。例如,我们有100个用户,每个用户有5000个msg…我想为每个用户创建一个新表,以便分别保存他们的msg并删除查询faster@user使用索引。一个索引正确的数据库可以处理100*5000行,甚至不费吹灰之力。有些数据库只有几百万行,请求只需几毫秒即可完成。
<?php
$mysqli = new mysqli(DB_SERVER,DB_USER,DB_PASS,DB_NAME);
if($mysqli->connect_errno) echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
echo $mysqli->host_info . "\n";
$query = "CREATE TABLE hwt_tools(
id mediumint(8) NOT NULL AUTO_INCREMENT,
user_id mediumint(8),
category_id mediumint(8),
target_url varchar(255),
favicon_url varchar(255),
desc_text text,
UNIQUE KEY id (id)
);";
//Use this to safely create a table while testing
if(!$mysqli->query($query)) echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
//Use this to drop existing table and start a new
//if(!$mysqli->query("DROP TABLE IF EXISTS hwt_tools") || !$mysqli->query($query)) echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
?>