无法在PHP中创建表

时间:2013-05-28 06:16:18

标签: php

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

3 个答案:

答案 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;

?>