-1
$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()”

4

3 回答 3

4

例如,您可以只添加一个名为“to”的字段,然后您可以在此处写入接收者名称,而不是为每个用户创建新表。这是不好的做法。

使新领域像

`receiver` varchar(50)

您可以通过以下查询获取他的消息:

SELECT * FROM `msgs` WHERE `receiver`='random_username'
于 2013-05-28T06:19:56.733 回答
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;

?>
于 2013-05-28T06:29:46.807 回答
0

您的错误表明这$stmt是无效的

这是因为您的查询没有准备好,因为语法错误和占位符的使用无效。

在创建表中删除列名周围的引号

$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);

您可以了解错误。

看这里的教程

这只是你告诉你调试技巧..实际上你不能使用占位符来表示表名和标识符..

看到这个标签

正如@Deepsy 所建议的那样..我也同意这是不好的做法..这将在您的数据库中创建许多表,这些表只能由一个表完成

于 2013-05-28T06:21:17.953 回答