Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在PHP中创建表_Php - Fatal编程技术网

无法在PHP中创建表

无法在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

它会给出此错误消息“调用非对象上的成员函数bind_param()”

例如,您只需添加一个名为“to”的字段,就可以在其中写入接收方名称,而不是为每个用户创建新表。这是个坏习惯

使新领域像

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

?>