$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();
它给出了此错误消息“在非对象上调用成员函数bind_param()”
答案 0 :(得分:4)
你可以添加一个名为"的字段到"例如,您可以在那里编写接收器名称,而不是为每个用户创建新表。这是不好的做法。
制作像
这样的新字段`receiver` varchar(50)
你可以通过以下查询获取他的消息:
SELECT * FROM `msgs` WHERE `receiver`='random_username'
答案 1 :(得分:0)
您的错误表明$stmt
无效
这是因为您的查询没有准备好,因为语法错误且占位符使用无效。
删除create table
中列名称周围的引号$query2="CREATE TABLE ? ( `msg_id` int(20) auto_increment primary key,
`sender` varchar(50),
`content` varchar(2000),
`date` varchar(50)
)";
您始终可以使用
调试if语句是否已准备好$stmt2=$db->prepare($query2) or die($db->error);
您可以了解错误。
请参阅教程here
这只是你告诉你调试技巧..实际上你不能使用占位符来表名和标识符..
请参阅this tag
正如@Deepsy所暗示的那样..我也同意这是不好的做法..这会在你的数据库中创建一些表,只能由一个表来完成
答案 2 :(得分:0)
看这个
<?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;
?>